配置文件 'compile-java8-release-flag' 中的 JDK 版本无效:无限范围:[9,对于项目 org.jboss:jboss-parent

Invalid JDK version in profile 'compile-java8-release-flag': Unbounded range: [9, for project org.jboss:jboss-parent

我们正在将 java 应用程序从 JBoss EAP 6 迁移到 JBoss EAP 7.3。我们将 jboss BOM 文件更新为 Jakarta EE 8 版本:

        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-jakartaee8-with-tools</artifactId>
            <version>${version.jboss.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

在构建我们最终的 EAR 文件时,maven 构建失败并出现以下错误:

Unable to initialize POM pom.xml: Invalid JDK version in profile 'compile-java8-release-flag': Unbounded range: [9, for project org.jboss:jboss-parent
        at org.apache.maven.artifact.ant.Pom.initialiseMavenProject(Pom.java:217)
        at org.apache.maven.artifact.ant.Pom.doExecute(Pom.java:418)
        at org.apache.maven.artifact.ant.AbstractArtifactTask.execute(AbstractArtifactTask.java:751)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:435)
        at org.apache.tools.ant.Target.performTasks(Target.java:456)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
        at org.apache.tools.ant.Main.runBuild(Main.java:851)
        at org.apache.tools.ant.Main.startAnt(Main.java:235)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: org.apache.maven.project.ProjectBuildingException: Invalid JDK version in profile 'compile-java8-release-flag': Unbounded range: [9, for project org.jboss:jboss-parent
        at org.apache.maven.project.DefaultMavenProjectBuilder.injectActiveProfiles(DefaultMavenProjectBuilder.java:1502)
        at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(DefaultMavenProjectBuilder.java:1194)
        at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(DefaultMavenProjectBuilder.java:1407)
        at org.apache.maven.project.DefaultMavenProjectBuilder.assembleLineage(DefaultMavenProjectBuilder.java:1407)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:823)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromRepository(DefaultMavenProjectBuilder.java:255)
        at org.apache.maven.project.DefaultMavenProjectBuilder.mergeManagedDependencies(DefaultMavenProjectBuilder.java:1456)
        at org.apache.maven.project.DefaultMavenProjectBuilder.processProjectLogic(DefaultMavenProjectBuilder.java:999)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildInternal(DefaultMavenProjectBuilder.java:880)
        at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProjectBuilder.java:508)
        at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:200)
        at org.apache.maven.artifact.ant.Pom.initialiseMavenProject(Pom.java:211)
        ... 18 more
Caused by: org.apache.maven.profiles.activation.ProfileActivationException: Invalid JDK version in profile 'compile-java8-release-flag': Unbounded range: [9,
        at org.apache.maven.profiles.activation.JdkPrefixProfileActivator.isActive(JdkPrefixProfileActivator.java:57)
        at org.apache.maven.profiles.DefaultProfileManager.isActive(DefaultProfileManager.java:273)
        at org.apache.maven.profiles.DefaultProfileManager.getActiveProfiles(DefaultProfileManager.java:209)
        at org.apache.maven.project.DefaultMavenProjectBuilder.injectActiveProfiles(DefaultMavenProjectBuilder.java:1496)
        ... 29 more

我们发现我们包含的 bom 使用 org.jboss.jboss-parent 作为父级,它包含以下配置文件:

<profile>
  <id>compile-java8-release-flag</id>
  <activation>
    <file>
      <exists>${basedir}/build-release-8</exists>
    </file>
    <jdk>[9,</jdk>
  </activation>

<!-- ... -->
</profile>

在 jdk 标签中,版本末尾缺少一个 ) 字符。 jboss-eap-jakartaee8-with-tools 的更新版本仍然使用 jboss-parent:35 所以它会产生同样的错误。

没有关于这个话题的相关讨论。还有一个 jboss-parent 版本 36 修复了这个问题,但是它没有在任何 boms 中使用。 在官方的 redhat maven 仓库增量更新和 eap 7.3 更新中都没有提到这个问题。

除了在本地 maven 存储库中手动编辑 jboss-parent 之外,如何解决这个问题?有官方修复吗?

谢谢。

TL;DR 解释 ant 中被遗忘的插件给我们开了个玩笑。我们需要一起更新插件或ant。

更长的解释: 所以我们要迁移的项目是旧的。它同时使用 Ant 1.9.1 和 Maven 3.0.5。事实证明,在 build.xml Ant 1.9.1 中的某一时刻使用了 Maven Ant Task 插件,该插件在其插件 jar 中附带了自己的 Maven 2.2.1。 在迁移之前,构建自动化工具之间的一切都运行良好。迁移后,在新的依赖项中定义了一个版本范围,这对 Maven 3.x 很好,但 Maven 2.x 死了。我们错误地确定是 Maven 3.x 导致了问题,但不是。

您应该从 Maven Ant Tasks 迁移到 Maven Artifact Resolver Ant Tasks。这应该可以解决“开放版本”问题,并且它不会将 maven 捆绑在 jar 中。

它在 proxy-repositories 中有一个错误.. 使我们从一个问题进入另一个问题,如所述 here :/