【问题标题】:What is the use of 'fork' and 'executable' options in Maven compiler plugin?Maven 编译器插件中“fork”和“executable”选项的用途是什么?
【发布时间】:2020-09-15 07:51:26
【问题描述】:

Maven-compiler-plugin 配置

...
<fork>true</fork>
<executable>${env.JAVA_HOME}\bin\javac.exe</executable>
...

【问题讨论】:

  • 当 Maven 构建你的代码时。它 fork Windows 的javac.exe 进程,这是一个适用于 Windows 的 Java 编译器应用程序
  • 所以即使系统中没有安装java,代码也能运行?
  • 不行,Javac程序必须安装在你的机器上,还必须添加到环境变量中${env.JAVA_HOME}表示你安装Java的目录
  • 谢谢艾尔。您是否知道无需在系统中安装 java 即可运行代码的任何方法。就像在 pom.xml 文件中添加一些东西一样
  • 如果你的机器上没有安装 Java,你想如何运行 Maven 来读取 POM 文件配置?

标签: java maven maven-compiler-plugin


【解决方案1】:

Maven 编译器插件有一个很好的 official documentation 页面解释所有插件选项。

&lt;fork&gt;:允许在单独的进程中运行编译器。如果为假 它使用内置编译器,如果为真,它将使用 可执行文件。

&lt;executable&gt;:设置fork时使用的编译器可执行文件 是真的

【讨论】:

    【解决方案2】:

    添加到Saikat’s answer:

    如果省略&lt;executable&gt; 并设置&lt;fork&gt;true&lt;/fork&gt;,maven-compiler-plugin 将选择JAVA_HOME/bin/javac 二进制文件。

    如果设置了&lt;fork&gt;false&lt;/fork&gt;,maven-compiler-plugin 将通过 ToolProvider 接口选择编译器。这意味着不会启动新进程,并且您的 Maven 正在运行的同一个 Java VM 也会进行编译。

    使用&lt;fork&gt;false&lt;/fork&gt;,您还可以使用compilerId 参数选择另一个编译器。

    提示:除非您有充分的理由更改它们,否则请使用默认值。 我现在能想到的唯一充分理由is a bug in JDK 16

    使用另一个 java 安装中的另一个 javac 不是一个很好的理由:You should use toolchains 为此。

    【讨论】:

    • 另一个原因:如果你想用 -Xstdout 文件重定向编译器输出,你必须 fork 来传递那个选项。事实上,任何非标准选项都必须有 fork
    猜你喜欢
    • 2019-02-25
    • 2021-08-02
    • 2018-02-03
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2021-03-04
    相关资源
    最近更新 更多