Maven Plugin fork 在 pom.xml中的作用

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

            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>1.5.9.RELEASEversion>
                <configuration>
                    <fork>truefork> 
                configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>

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

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.pluginsgroupId>
        <artifactId>maven-compiler-pluginartifactId>
        <version>3.8.1version>
        <configuration>
          <verbose>trueverbose>
          <fork>truefork>
          <executable>C:\Program Files\Java\jdk1.6.0_33executable>
          <compilerVersion>1.3compilerVersion>
        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.pluginsgroupId>
    <artifactId>maven-compiler-pluginartifactId>
    <version>3.2version>
    <configuration>
      <fork>truefork>
      <meminitial>128mmeminitial>
      <maxmem>1024mmaxmem>
      <compilerArgs>
        <arg>-XX:MaxPermSize=256marg>
      compilerArgs>
    configuration>
plugin>

总结

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

你可能感兴趣的:(Java,java,maven)