繁体   English   中英

maven 编译器插件和 maven 工具链插件有什么区别?

[英]What is the difference between maven compiler plugin and maven toolchains plugin?

我不得不将一些遗留代码集成到我的 maven 版本中,所以我使用了 maven 推荐的工具链插件来更改 java 版本:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-toolchains-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <goals>
                <goal>toolchain</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <toolchains>
            <jdk>
                <version>1.5</version>
            </jdk>
        </toolchains>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.10.0</version>
    <configuration>
        <compilerArgs>
            <arg>-Xmaxerrs</arg>
            <arg>1000</arg>
        </compilerArgs>
    </configuration>
</plugin>

然后我遇到了最大 100 个编译错误问题,它需要将特殊选项传递给 javac,我发现我只用 maven 编译器就可以做到:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.10.0</version>
    <configuration>
        <fork>true</fork>
        <compilerVersion>1.5</compilerVersion>
        <executable>C:\Java\jdk-1.5.0_22\bin\javac.exe</executable>
        <source>1.5</source>
        <target>1.5</target>
        <compilerArgs>
            <arg>-Xmaxerrs</arg>
            <arg>1000</arg>
        </compilerArgs>
    </configuration>
</plugin>

两个片段产生相同的结果:java 编译器从 maven 默认更改为 java 1.5。 两者运行的时间大致相同,因此没有明显的性能差异。 我想知道两者之间是否有任何优势,以便我知道何时使用它们。

他们做不同的事情:

  • 编译器插件专门配置您的 Java 代码的编译方式(并且仅此而已)。
  • toolchains插件只是确保其他插件都使用相同的Java工具链(即相同的JDK)来编译、运行、测试、生成javadoc等。

这在各个插件的文档中进行了解释。

请注意,并非所有插件都是“工具链感知”的,但编译器插件是。

... 一个比另一个有什么好处

好吧,有些事情你可以用一个而不是另一个来做,反之亦然 例如,您不能使用工具链插件设置 Java 编译器选项。

然而,它们并不相互排斥。 您可以在同一个 POM 文件中使用两者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM