gpt4 book ai didi

java - 为什么 Maven enforcer 会限制为 Java 1.6?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:09 25 4
gpt4 key购买 nike

当我在我的项目上运行 mvn test 时,出现 JDK 版本错误。

这是输出:

[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< net.rorynolan:Detrendr >-----------------------
[INFO] Building Detrendr 0.0.0.9003-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce-rules) @ Detrendr ---
[INFO] Adding ignorable dependency: null:jcodings:null
[INFO] Adding ignore: org/jcodings/*
[INFO] Adding ignorable dependency: null:jnr-constants:null
[INFO] Adding ignore: com/kenai/constantine/*
...
[INFO] Adding ignorable dependency: com.sun:tools:null
[INFO] Adding ignore: *
[INFO] Restricted to JDK 1.6 yet org.junit.platform:junit-platform-commons:jar:1.3.1:test contains org/junit/platform/commons/JUnitException.class targeted to JDK 1.8
[INFO] Restricted to JDK 1.6 yet org.junit.jupiter:junit-jupiter-api:jar:5.3.1:test contains org/junit/jupiter/api/AssertArrayEquals.class targeted to JDK 1.8
[INFO] Restricted to JDK 1.6 yet org.junit.jupiter:junit-jupiter-engine:jar:5.3.1:test contains org/junit/jupiter/engine/Constants.class targeted to JDK 1.8
[INFO] Restricted to JDK 1.6 yet org.junit.platform:junit-platform-engine:jar:1.3.1:test contains org/junit/platform/engine/TestDescriptor.class targeted to JDK 1.8
[WARNING] Rule 5: org.apache.maven.plugins.enforcer.EnforceBytecodeVersion failed with message:
Found Banned Dependency: org.junit.platform:junit-platform-commons:jar:1.3.1
Found Banned Dependency: org.junit.jupiter:junit-jupiter-api:jar:5.3.1
Found Banned Dependency: org.junit.jupiter:junit-jupiter-engine:jar:5.3.1
Found Banned Dependency: org.junit.platform:junit-platform-engine:jar:1.3.1
Use 'mvn dependency:tree' to locate the source of the banned dependencies.
[INFO] ------------------------------------------------------------------------
...
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

我的 pom.xml 位于 https://github.com/rorynolan/ij_detrendr/blob/master/pom.xml .

mvn help:effective-pom中有线索

我能看到的地方

<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.3.1</version>
...
<rules>
...
<enforceBytecodeVersion>
<maxJdkVersion>1.6</maxJdkVersion>
<excludes>
<exclude>com.headius:invokebinder</exclude>
<exclude>com.sun:tools</exclude>
</excludes>
</enforceBytecodeVersion>
<banCircularDependencies />
</rules>
</configuration>
</plugin>

但这就是我所拥有的。我尝试将 maven enforcer 插件显式添加到我自己的 pom.xml 但无济于事。

最佳答案

您的项目 pom parent 是:net.imagej:pom-imagej:13.2.0这是org.scijava:pom-scijava:8.4.0的 parent 其中包含以下与 Java 版本相关的摘录:

<scijava.jvm.version>1.6</scijava.jvm.version>

<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<!-- Require the Java 6 platform. -->
<configuration>
<source>${scijava.jvm.version}</source>
<target>${scijava.jvm.version}</target>
</configuration>
</plugin>

<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
...
<enforceBytecodeVersion>
<maxJdkVersion>${scijava.jvm.version}</maxJdkVersion>
...
</enforceBytecodeVersion>
</plugin>

因此,执行者规则及其对 Java 1.6 的坚持是通过您的项目的父系继承的。

Java 1.6 的这一限制与编译为 Java 1.8 的 JUnit5 库冲突。

可以也许可以在您自己的 POM 中覆盖 enforcer 插件(参见 the Maven docs 中对 combine.self="override" 的引用),但事实上您的模块的grandparent (org.scijava:pom-scijava:8.4.0) 明确声明它希望在 Java 1.6 上运行,强烈建议任何此类覆盖都会导致问题。

我认为更明智的做法是以下之一:

  • 从 Junit5 降级到与 Java 1.6 兼容的 Junit4 版本
  • 将你的父版本(net.imagej:pom-imagej:13.2.0)升级到与 Java 8 兼容的版本,注意:net.imagej:pom-imagej :13.2.0 已有 3 年历史,因此您可能会发现升级到最新版本后此问题就会消失。

关于java - 为什么 Maven enforcer 会限制为 Java 1.6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52582927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com