Почему Maven Enforcer ограничивается Java 1.6? - PullRequest
0 голосов
/ 01 октября 2018

Когда я запускаю 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>

Но это все, что у меня есть.Я попытался явно добавить плагин mavenforcer к своему pom.xml, но безрезультатно.

1 Ответ

0 голосов
/ 01 октября 2018

Ваш проект pom содержит: net.imagej: pom-imagej: 13.2.0 , который является org.scijava: pom-scijava: 8.4.0 , который содержит следующие выдержки, относящиеся к версии 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 конфликтует с библиотеками JUnit5, которые были скомпилированы в Java 1.8.

Вы могли бы возможно переопределить плагин принудительного применения в своем POM (см. ссылки на combine.self="override" в Maven docs ), но тот факт, что прародитель вашего модуля (org.scijava:pom-scijava:8.4.0) явно заявляет, что ожидает запуска на Java 1.6, настоятельно предполагает, что любое такое переопределение вызовет проблемы.

Я думаю, что более разумный курс будетбыть одним из следующих:

  • Понижение версии с Junit5 до версии Junit4, совместимой с Java 1.6
  • Обновление версии вашего родителя (net.imagej:pom-imagej:13.2.0) до версии, которая являетсякомсовместимо с Java 8, обратите внимание: net.imagej:pom-imagej:13.2.0 уже 3 года, поэтому вы можете обнаружить, что при обновлении до последней версии эта проблема исчезнет.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...