Maven Plugin fork 在 pom.xml中的作用

timo-nbktp 1年前 ⋅ 1271 阅读

使用Spring-boot 的热加载 devtools开发工具时,团队中有些同事的电脑会不生效。无意中发现有人给了这样一个解决方案:

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.9.RELEASE</version>
                <configuration>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

于是在加了一个 <fork>true</fork> 还真的解决了问题。

fork 这个单词,程序员朋友应该不会陌生,在 Github 上,3大按钮,最后一个就是 Fork

在Maven 插件中,这个 fork 到底寓意何为?
于是找了很多资料,渐渐弄清楚了原委。

fork 的含义

这里的 fork 设置为 true,实际上是会在 maven 编译的时候新创建一个虚拟机执行。这个新创建 JVM 就是这里的 fork。
它速度会稍慢一些,但是隔离性非常好。

fork 使用场景

在我们的开发机器上,一般是安装 maven 的,如果你使用 mvn -v 指令去查看信息,会发现默认的 maven 使用的电脑上 1.8 的 jdk,并且编码方式为 UTF-8.

C:\Users\develop>mvn -v
Apache Maven 3.6.3
Maven home: E:\devtool\apache-maven-3.6.3\bin\..
Java version: 1.8.0_261, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_261\jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

但是有时候,项目可能需要使用 jdk 1.6 去编译,使用不同的JDK就可以创建 fork 一个 JVM 去编译。

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <verbose>true</verbose>
          <fork>true</fork>
          <executable>C:\Program Files\Java\jdk1.6.0_33</executable>
          <compilerVersion>1.3</compilerVersion>
        </configuration>
      </plugin>

上面的 maven 3.8.1 版本要求 jdk至少 1.8 以上,但是我的项目又只能跑在 jdk1.6 中,这是上面的方案无疑是较好的解决了该问题。 maven 本身是运行在 jvm 之上的,编译项目的 jdk 可以和运行 maven 的 jdk 不同。

注意,fork 的时候如果不指定 executable参数, maven 将可能会使用 PATH 中任意 jdk来执行。

又或者使用 GBK 等其他编码方式,使用默认的 maven 就会产生乱码,此时也可以 fork 一个 JVM.

还有,如果你想修改JVM 的一些参数,那你还可以通过下面的方式指定 JVM 参数

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
      <fork>true</fork>
      <meminitial>128m</meminitial>
      <maxmem>1024m</maxmem>
      <compilerArgs>
        <arg>-XX:MaxPermSize=256m</arg>
      </compilerArgs>
    </configuration>
</plugin>

总结

默认情况下 ,fork 是 false,Maven 使用 运行自己的 jdk (maven 是需要依赖 jdk 存在的) 来进行 compiler , 如果不想使用这个默认的 jvm,就可以通过 fork 来实现。fork 需要消耗更多的资源,以及花费更多的时间进行编译,所以如果开发机器性能不高,也应该 尽量避免 使用这种方式。

 

--end--

 

 

版权 本着开源共享、共同学习的精神,本文转载自 https://blog.csdn.net/jiangchao858/article/details/108880019 , 如果侵权之处,请联系博主进行删除,谢谢~