Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写父pom中指定的java版本的不同方法_Java_Maven_Pom.xml - Fatal编程技术网

重写父pom中指定的java版本的不同方法

重写父pom中指定的java版本的不同方法,java,maven,pom.xml,Java,Maven,Pom.xml,我正在使用一个父pom,它将java版本设置为1.5。在我的具体项目中,我使用了1.6,因此每次进行Maven更新时,我都会在eclipse中更改编译器版本 为了寻找解决方案,我找到了一些涉及覆盖子pom中父pom行为的解决方案 我的问题是它们之间是否有任何区别,如果有,我应该使用哪种选择。我发现的选项(可能还有更多)有: 在属性标签中:1.6 在属性标签中:1.6 在配置标记中:${jdk.version} 我对Maven很陌生。提前感谢。属性只是属性,除非您在某个地方使用它们,否则它们没

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

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

我的问题是它们之间是否有任何区别,如果有,我应该使用哪种选择。我发现的选项(可能还有更多)有:

  • 在属性标签中:
    1.6
  • 在属性标签中:
    1.6
  • 在配置标记中:
    ${jdk.version}

我对Maven很陌生。提前感谢。

属性只是属性,除非您在某个地方使用它们,否则它们没有多大意义。
重要的是在
maven编译器插件
配置中设置版本:

<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>

1.6
org.apache.maven.plugins
maven编译器插件
3.3
${jdk.version}
${jdk.version}

您一定要选择:

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

1.6
1.6

它是用于设置Java版本的事实上的标准Maven属性,它不仅被
Maven编译器插件使用,也被其他标准Maven插件(包括报告插件)使用,因此它在全球范围内应用您的Java版本,不仅用于编译类。

如果您的父pom使用1.7JDK,而您希望子pom使用1.6Java版本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>

org.apache.maven.plugins
maven编译器插件
3.1
真的
真的
/usr/lib/jvm/java-1.6.0-openjdk-amd64/bin/javac
1.6

完全正确。你给你的财产取什么名字并不重要。它们就像变量。一旦声明了表示JDK版本的属性,例如
myJdkVersionPropertyName
,就可以在
maven编译器插件的
配置
标记中以相同的名称引用它,例如
${myJdkVersionPropertyName}
。这个标签的
目标
元素实际上是设置JDK版本的元素。你们都是对的。我不理解“财产”的含义。我的父pom定义为1.5,因此覆盖此属性上的值就成功了。谢谢我不熟悉Maven,但我参与了Maven管理的一个项目。这些内容将放在哪里?文件/文件夹位置的名称,我在pom.xml中没有看到。这将放在pom.xml文件中。也许你的项目是按照Michal Kalinowski下面的答案设置的?否则它将返回默认的java版本,即1.5。您应该问的问题是:天哪。。。在我的屏幕上,gom读起来很像色情,我打算把它标记出来,所以。。。