覆盖父pom

时间:2015-06-18 09:06:00

标签: java maven pom.xml

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

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

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

  
      
  • 在属性标记中:<app.java.version>1.6</app.java.version>
  •   
  • 在属性标记中:<jdk.version>1.6</jdk.version>
  •   
  • 在配置标记中:<source>${jdk.version}</source>
  •   

我对Maven很新。提前谢谢。

3 个答案:

答案 0 :(得分:6)

你绝对想要:

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

用于设置Java版本的事实上的标准Maven属性不仅由maven-compiler-plugin使用,而且还由其他标准Maven插件(包括报告插件)使用,因此适用您的Java版本全局,不仅用于编译类。

答案 1 :(得分:4)

属性只是属性,除非你在某处使用它们,否则这些属性并不多 重要的是您在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>

答案 2 :(得分:0)

如果您的父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>