我对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包输出

maven-compiler-plugin:3.1:compile (default-compile) @ testproj ---

...和其他一些我没有声明的插件。

那么这些插件是Maven pom的默认隐藏部分吗?在属性中设置源/目标和在Maven插件配置元素中设置源/目标有什么不同吗?

其他一些问题是——应该用哪种方式(如果它们不相等,什么时候用)?哪一个是最好的多模块项目,如果Java版本指定的pom是不同的版本指向JAVA_HOME?


当前回答

考虑另一种选择:

<properties>
    <javac.src.version>1.8</javac.src.version>
    <javac.target.version>1.8</javac.target.version>
</properties>

它应该与maven.compiler.source/maven.compiler.target相同,但上面的解决方案适用于我,否则第二个得到父规范(我有一个.pom的矩阵)

其他回答

如果您正在使用IntelliJ idea maven构建。

对于NetBeans IDE,更改项目属性- (Jersey Service) -类别>来源> 选择“源/二进制格式”为1.8。

下面的步骤对我来说很有魅力!所以想和大家分享一下。

这些是我在pom.xml文件中添加的用于基本项目的行。我使用的是Java 12(你可以替换你的11、10、1.8等)。

<properties>
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>12</release>
            </configuration>
        </plugin>
    </plugins>
</build>

更改pom文件后,请重新加载您的项目,以便IDE可以下载/获取该插件到项目中。(对于IntelijIDEA:右键单击pom.xml -> Go to maven -> Reload project)。

请确保在您的IDE中配置所需的版本。

以上的解决方案都不适合我。所以我采取了以下步骤:

在pom.xml中添加:

<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

进入“项目属性> Java构建路径”,然后删除JRE 指向JRE1.5的系统库。 Force更新了项目。

考虑另一种选择:

<properties>
    <javac.src.version>1.8</javac.src.version>
    <javac.target.version>1.8</javac.target.version>
</properties>

它应该与maven.compiler.source/maven.compiler.target相同,但上面的解决方案适用于我,否则第二个得到父规范(我有一个.pom的矩阵)