Maven继承与pluginManagement不起作用

4

我在父pom中配置了这个插件

 <properties>
        <java.version>1.7</java.version>
        <maven-compiler-plugin.version>3.3</maven-compiler-plugin.version>
 </properties>
 ...
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <compilerArgument>-XDignore.symbol.file</compilerArgument>
                </configuration>
            </plugin>
         </plugins>
    </pluginManagement>
</build>

并且这是在子元素中

<build>
    <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
    </plugins>
</build>

当我在两个项目上运行maven更新项目时,我希望子项目将JRE更改为1.7,但它没有更改。我无法弄清楚原因。如果我将配置放在子项目中,则可以正常工作...您知道我做错了什么吗?

您确定父级在<parent>元素中正确列出了吗? - Uday Shankar
@UdayShankar 是的,我确定。我只是没有加那部分内容,以免延长帖子。 - jscherman
验证一下,当你在子项目中运行 mvn help:effective-pom 命令时,maven-compiler-plugin 的配置会显示什么?如果运行 mvn help:effective-pom -Djava.version=1.7 命令,是否会显示任何不同的内容? - Don Bottstein
@DonBottstein 没有区别,这些输出之间没有任何差异。 - jscherman
@jscherman 根据这个,看起来不是 pom 的问题,更可能是你的 IDE(Eclipse?)我不知道这是否有帮助,但这里有一个故障排除指南,针对你所看到的问题:https://maven.apache.org/plugins/maven-eclipse-plugin/trouble-shooting/jdk-being-used-is-different-than-expected.html - Don Bottstein
我把插件放在父级外部的pluginManagement中,并添加了<inherited>true</inherited>,这样我就删除了子代中的插件,并继承了它。虽然不是最好的解决方案,但这是我能做到的最好的方法。谢谢! - jscherman
2个回答

1
我在构建过程中遇到了同样的问题。构建失败,出现以下错误:
[INFO] Compiling 2 source files to /project/target/test-classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /project/src/test/java/com/example/MyClass.java:[18,63] lambda expressions are not supported in -source 1.7
(use -source 8 or higher to enable lambda expressions)

由于测试文件的编译级别不正确,导致出现问题。以下配置对我有效:
在父级中:
<properties>
  <java.version>1.8</java.version>
  <maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
</properties>
...
<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <testSource>${java.version}</testSource>
          <testTarget>${java.version}</testTarget>
        </configuration>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

在孩子中:
<build>
  <plugins>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
    </plugin>
  </plugins>
</build>

0
一个典型的问题是 maven-compiler-plugin 的版本过旧。在版本3.6中引入了release选项。尝试在父POM中指定一个更新的maven-compiler-plugin版本并使用release选项来指定Java版本。从JDK 9开始,release选项替代了sourcetarget
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.11.0</version>
  <configuration>
    <release>11</release>
  </configuration>
</plugin>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接