maven插件frontend-maven-plugin使用

前言

  以前的javaWeb项目大多数是java程序猿又当爹又当妈的,既搞前端又搞后端,所有的代码放在一起,最后发布的时候打包成一个war包发布。

  随着时代的发展,前后端开始分离,很多web项目的前端和后端都不在一个项目里,等到都开发完了再整合在一起发布war包(当然互联网公司一般都不这样干)。这个时候如果靠开发人员手动去整合,不仅费时费力,还容易出错,为此我们可以借助maven的frontend-maven-plugin插件来自动化处理。

  frontend-maven-plugin的介绍这里就不说了,主要功能是可以运行node、webpack、npm等,有兴趣可以自己上github看下。这边重点介绍怎么配置。

配置

  打开maven项目里的pom.xml文件,在<build></build>中加入

1
2
3
4
5
6
7
8
9
10
11
12
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.7.5</version>
<configuration>
<!--工作目录 指放置package.json和前端配置文件的位置-->
<workingDirectory>src/main/resources/vue-single-question</workingDirectory>
</configuration>
...
</plugin>
</plugins>

  这边的<version>版本自己看着用,目前最新的版本(2019/3/13)是1.7.5,然后这里的<workingDirectory>是指放置package.json目录的位置,这里的vue-single-question是一个用vue-cli搭建的vue项目,原本如果要打包的话是要先在这个目录里执行npm run build的,然后把生成的dist放进war包里面,并且前提还必须电脑上安装了node环境。如果使用frontend-maven-plugin的话,不需要node环境也能build,可以说是很nice了。

  接着我们在<configuration>后面写上

1
2
3
4
5
6
7
8
9
10
11
12
<executions>
<execution>
...
</execution>
<execution>
...
</execution>
<execution>
...
</execution>
...
</executions>

   1、这里的每个<execution>相当于我们在命令行里面输入的每条命令,回想下我们用命令行打包的时候,首先需要电脑有node环境,所以这里的第一个<execution>就是下载node,配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--安装node和npm-->
<execution>
<id>install node and npm</id><!--名字任意 -->
<goals>
<goal>install-node-and-npm</goal><!--固定写法 -->
</goals>
<phase>generate-resources</phase>
<configuration>
<!--node和npm版本 -->
<nodeVersion>v10.12.0</nodeVersion>
<npmVersion>6.4.1</npmVersion>
<!--网络慢可以配置国内镜像 -->
<!--<nodeDownloadRoot>http://npm.taobao.org/mirrors/node/</nodeDownloadRoot>-->
<!--<npmDownloadRoot>http://npm.taobao.org/mirrors/npm/</npmDownloadRoot>-->
</configuration>
</execution>

  这里的id可以随意命名,只是用来运行maven命名时打印出来的别名,类似下面这个 (前面是goal,括号里是id)
avatar

  2、接着我们需要执行npm install来下载node_modules,所以第二个<execution>配置如下:

1
2
3
4
5
6
7
8
9
10
<execution>
<id>npm install</id><!--名字任意 -->
<goals>
<goal>npm</goal><!--固定写法 -->
</goals>
<phase>generate-resources</phase>
<configuration><!--参数,指的是跟在npm后面的参数,可选,默认install -->
<arguments>install</arguments>
</configuration>
</execution>

  3、最后,我们需要执行npm run build来打包vue项目,所以最后一个<execution>配置如下:

1
2
3
4
5
6
7
8
9
10
<execution>
<id>npm build</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>

  完整配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<build>
<plugins>
<!--vue编译-->
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.7.5</version>
<configuration>
<!--工作目录 指放置package.json和前端配置文件的位置-->
<workingDirectory>src/main/resources/vue-single-question</workingDirectory>
</configuration>

<executions>
<!--安装node和npm-->
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<nodeVersion>v10.12.0</nodeVersion>
<npmVersion>6.4.1</npmVersion>
<!--网络慢可以配置国内镜像 -->
<!--<nodeDownloadRoot>http://npm.taobao.org/mirrors/node/</nodeDownloadRoot>-->
<!--<npmDownloadRoot>http://npm.taobao.org/mirrors/npm/</npmDownloadRoot>-->
</configuration>
</execution>

<!--执行npm install-->
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>

<!--执行npm run build-->
<execution>
<id>npm build</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>

</executions>
</plugin>
</plugins>
</build>

使用

  运行mvn clean compile或者idea里面的maven点击compile即可。

结论

  frontend-maven-plugin实际上就是用maven来帮我们自动运行node命令,优点是免node环境,方便代码拷贝给别人,不需要环境即可打包前端代码。

坚持原创技术分享,您的支持将鼓励我继续创作!