最佳答案
我对Maven不是很有经验,在尝试多模块项目时,我开始想知道如何在父Maven pom中为所有子模块指定Java版本。直到今天我还在用:
<properties>
<java.version>1.8</java.version>
</properties>
...但当我研究时,我发现你也可以在Maven编译器插件中指定Java版本,就像这样:
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
然后把它包装成插件管理标签,以使子poms使用这个。第一个问题是:
在属性中设置Java版本和在Maven编译器插件中设置Java版本有什么不同?
我找不到明确的答案,但在研究过程中,我发现你也可以这样指定Java版本:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...这表明编译器插件是存在的,即使我没有显式声明它。运行mvn package
输出
maven-compiler-plugin:3.1:compile (default-compile) @ testproj ---
...和其他一些我没有声明的插件。
那么这些插件是Maven pom的默认隐藏部分吗?在属性中设置源/目标和在Maven插件配置元素中设置源/目标有什么不同吗?
其他一些问题是——应该用哪种方式(如果它们不相等,什么时候用)?哪一个是最好的多模块项目,如果Java版本指定的pom是不同的版本指向JAVA_HOME
?