2017-06-15 113 views
0

我对maven编译器插件以及它做了什么感到困惑。我有一个项目有几个模块。在我上面的pom.xml我有一个部分maven编译器插件混淆

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.5.1</version> 
    <inherited>true</inherited> 
    <configuration> 
    <source>1.7</source> 
    <target>1.7</target> 
    </configuration> 
</plugin> 

我的理解是这样的指定用于编译代码的JDK编译器版本,而这部分得到由所有模块继承。我没有得到的是在我的IntelliJ IDEA中,我仍然可以在设置中指定项目JDK,并且它似乎会覆盖此设置。当我在IDE中运行Maven安装时,我可以确认它使用JDK 8中的javac进行编译。那么这部分究竟做了什么?

回答

0

你是对的; maven-compiler设置应该由子模块继承。

我不知道IntelliJ,但我可以告诉你,Eclipse挑选&从maven config中选择任何想要的东西,其余的使用它自己的设置。 因此,我期望IntelliJ可以做类似的事情?

最简单的测试方法是通过命令行运行mvn clean install,查看哪些“胜出”。如果你得到了用1.8编译的工件,那么这意味着你在Maven配置中缺少一些东西,导致这些设置不能传播给孩子。如果你得到了用1.7编译的工件,那么它是IntelliJ谁做的,而不是maven-compiler-plugin

+0

但我只在我的系统上安装了JDK 8。看起来,即使我在编译插件中设置了版本,maven仍然可以正常运行。所以这个插件是无用的? – fhcat

+0

JDK 8 _can_编译针对JDK 7的源代码,因此无关紧要,只有JDK 8。 插件并非无用;如果你想在没有IntelliJ的情况下(例如通过Jenkins的CI)在外部运行你的构建,那么它就会发挥作用。 – Andrei