maven 如何对react 打包编译成war包的方法

需求背景

因为前端(react脚手架)项目打包一直用的jekens第三方库用脚本执行命令行的方式去打包(减少对jekens第三方库的依赖),想着直接能不能用maven(java的打包工具)去打包前端代码。

准备工作

因为这些事情需要安装maven插件去完成,其中对maven的版本要求是3.6的版本或者更高版本,附上maven的安装包zip下载链接maven 下载(记得下载-bin.zip为后缀的文件),下载以后解压好,存在任意盘。

文件目录结构

build 是react build后的产物 ;node是放node和npm等安装包的地方;node-modules是放npm 下载好的react需要的插件 ;src和public放的react源码 ;target是执行生成war包命令后自动生成的文件夹,为war包的存放位置;package.xml为文件夹编译成war包的设置文件;pom.xml为maven的相关配置文件;

实现步骤

1、首先在java项目根目录的pom.xml配上你的项目文件夹(比如:face-v),配置好了以后你的前端文件夹就可以执行maven 的脚本了


我的前端相关代码叫文件夹为face-v

2、下载好了maven安装包后,需要配置好idea(java编辑器)里的maven设置,如图

idea设置maven 配置按钮
第一步,设置maven的安装目录,第二步,把maven的设置文件导入进去,setting文件的设置需要根据自己项目的实际情况去配置,下图是我项目的配置

setting 的具体改动

我们项目是固定在一个机器上进行打包,所以配置了该机器的镜像
这个是网络代理,因为网络较差,下载插件会失败(网络好的话,可不设置)


画红线部分就是写上maven的安装位置下的repository文件夹,其余不用设置

3、去拷贝别的java srv下的pom.xml到你的项目根目录下(为什么一定要pom.xml文件?答:maven靠pom.xml去执行),把没用的内容都删掉(只留下一些版本和项目名称这些内容即可)

pom详细设置解答

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<artifactId>前端代码文件夹名称</artifactId>

<version>${version}</version> <!--version变量-->

<packaging>pom</packaging><!--固定格式pom-->

<!--根目录下的相关配置-->

<parent>

<groupId>biolive</groupId>

<artifactId>app-parent</artifactId>

<version>6.0.0</version>

<relativePath>../../pom.xml</relativePath>

</parent>

<!--以上这些都是根据自己项目设置-->

<!--配置开始-->

<build>

    <plugins>

      <plugin>

                <groupId>com.github.eirslett</groupId>

                <artifactId>frontend-maven-plugin</artifactId><!--maven 可应用在前端的插件-->

                <version>1.12.1</version><!--插件的版本-->

                <configuration>

                    <installDirectory>${basedir}</installDirectory>  <!-- 该插件的安装位置,这里我们设置的变量,代表的是根目录的意思,可根据自己的情况去设置 -->

                 </configuration>

                <executions>

                    <execution>

                        <id>install node and npm</id> <!-- webpack必须有node支持,下载node和npm -->

                        <phase>compile</phase>  <!-- 这个可写可不写,写了说明必须要执行这段命令 -->

                        <goals>

                            <goal>install-node-and-npm</goal><!-- 执行下载node和npm 命令-->

                        </goals>

                        <configuration>

                            <nodeVersion>v16.14.0</nodeVersion><!-- 这个v是必不可少的,因为node下载的官方地址,版本部分有带v -->

                            <npmVersion>6.14.5</npmVersion>

                        </configuration>

                    </execution>

                    <execution>

                        <id>npm install</id><!-- react脚手架默认的react插件下载的命令行,可根据自己情况调整-->

                        <phase>compile</phase>

                        <goals>

                            <goal>npm</goal>

                        </goals>

                        <configuration>

                            <arguments>install</arguments>

                        </configuration>

                    </execution>

                    <execution>

                        <id>npm run build</id> <!-- react脚手架默认的react打包的命令行,可根据自己情况调整--> 

                        <phase>compile</phase>

                        <goals>

                            <goal>npm</goal>

                        </goals>

                <configuration>

                            <arguments>run build</arguments>

                        </configuration>

                    </execution>

                </executions>

            </plugin>

<plugin>

<!-- 以上配置好以后,点击maven的clean和install 命令,就可以打包出react build文件夹了-> 


<!-- 打出react build文件夹后,这个事情已经成功了一半,剩下的就是怎么指定build文件夹让他编译成war包-> 

 <artifactId>maven-assembly-plugin</artifactId><!--把打包出来的react build文件改成war格式的插件-->

 <version>2.2.1</version>

  <executions>

          <execution>

                   <id>make-assembly</id>

                    <phase>package</phase>

                     <goals>

                          <goal>single</goal>

                     </goals>

                    </execution>

                </executions>

<configuration>

              <appendAssemblyId>false</appendAssemblyId>

              <descriptors>

                  <descriptor>package.xml</descriptor><!--把打包出来的react build文件改成war格式的插件,该插件需要另外配置一个设置的打包              文件package.xml,我放在根目录下,package详细设置会贴图-->

                    </descriptors>

</configuration>

</plugin>

</plugins>

<finalName>${project.artifactId}</finalName><!--把war包的版本号去掉-->

</build>

<!--配置结束-->

<!--以下这些都是项目默认的,不用设置-->

<distributionManagement>

<snapshotRepository>

<id>snapshots</id>

<name>Nexus server</name>

<url>http://172.100.1.50:8081/nexus/content/repositories/snapshots</url>

</snapshotRepository>

<repository>

<id>releases</id>

<name>Nexus server</name>

<url>http://172.100.1.50:8081/nexus/content/repositories/releases</url>

</repository>

</distributionManagement>

</project>

package.xml的详细设置

<assembly>

    <id>assembly</id>

    <formats>

        <format>war</format><!--代表要生成war包-->

    </formats>

    <includeBaseDirectory>true</includeBaseDirectory><!--设置成false代表没有生成新的文件夹即war解开就是react build 里的代码文件 -->

    <fileSets>

        <fileSet>

            <directory>${basedir}\build</directory><!--指定打包的是根目录下的build文件-->

            <outputDirectory>\</outputDirectory><!--指定打包出来的war包放在根目录下,说明:生成war包时会自动生成target的文件夹,target里放着war包 -->

        </fileSet>

    </fileSets>

</assembly>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容