覆盖父 pom 中指定的 java 版本的不同方法

Different ways to override java version specified in parent pom

我正在使用将 java 版本设为 1.5 的父 pom。在我的具体项目中,我使用的是 1.6,所以每次执行 Maven 更新时,我都会在 eclipse 中更改编译器版本。

在寻找解决方案时,我发现了一些涉及覆盖子 pom 中父 pom 行为的解决方案。

我的问题是它们之间是否存在差异,如果存在差异,我应该使用哪个选项。我找到的选项(也许还有更多)是:

  • In properties tag: <app.java.version>1.6</app.java.version>
  • In properties tag: <jdk.version>1.6</jdk.version>
  • In configuration tag: <source>${jdk.version}</source>

我是 Maven 的新手。提前致谢。

属性只是属性,除非你在某处使用它们,否则没有多大意义。
重要的是你在maven-compiler-plugin配置中设置版本:

<properties>
    <jdk.version>1.6</jdk.version>
</properties>

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
            <source>${jdk.version}</source>
            <target>${jdk.version}</target>
        </configuration>
    </plugin>
</plugins>

你绝对想去:

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

它是 事实上的 标准 Maven 属性 用于设置 Java 版本,它不仅被 maven-compiler-plugin 使用,还被 maven-compiler-plugin 使用其他标准 Maven 插件(包括报告插件),因此这将在全球范围内应用您的 Java 版本,而不仅仅是编译 类.

如果您的父 pom 使用 1.7 jdk 并且您希望子 pom 使用 1.6 java 版本。 combine.self="override" 使用下面的代码很重要:

<build>
    <pluginManagement>
    <plugins>           
        <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration combine.self="override">
      <verbose>true</verbose>
      <fork>true</fork>
      <executable>/usr/lib/jvm/java-1.6.0-openjdk-amd64/bin/javac</executable>
      <compilerVersion>1.6</compilerVersion>
    </configuration>
  </plugin>
    </plugins>
</pluginManagement>
</build>