如何解决在中央仓库(https://repo1.maven.org/maven2)未找到javax.xml.bind:jaxb-api:pom:2.3.0-b161121.1438的问题?

8

我正在将一个应用程序迁移到使用 ehcache 3.10.0,但出现了构建错误:Could not find artifact javax.xml.bind:jaxb-api:pom:2.3.0-b161121.1438 in central (https://repo1.maven.org/maven2)。

我在本地的 .m2 目录中看到了这个文件: .m2\repository\javax\xml\bind\jaxb-api -- 2.3.0-b161121.1438

所以这是一个 IDE 的问题,因为它没有在我的本地构建中找到它,但这个版本(2.3.0-b161121.1438)仍然不在 maven 上可用,https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/

因此,构建失败并显示该artifact错误。有关如何解决此问题的任何提示吗?


1
POM文件中包含什么内容? - Boris
这是我为ehcache添加的内容。我假设它使用了该构件,因为在我从2.1.x版本更新ehcache之前,我没有遇到过这个错误。(无法正确格式化) <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.10.0</version> </dependency> - Kari
我刚从本地的.m2中删除并重新构建了它,它又被添加回来了,但我仍然收到错误提示。<咕哝咕哝咕哝> - Kari
1个回答

7
类似问题已在 ehcache3 的 GitHub 上报告:https://github.com/ehcache/ehcache3/issues/2881
这个依赖项导致了问题,来自 ehcache pom.xml: https://search.maven.org/artifact/org.ehcache/ehcache/3.10.0/jar
    <dependency>
      <groupId>org.glassfish.jaxb</groupId>
      <artifactId>jaxb-runtime</artifactId>
      <version>[2.2,3)</version>
      <scope>runtime</scope>
    </dependency>

由于版本开放,以下依赖链导致了这个问题:Failed to collect dependencies at org.ehcache:ehcache:jar:3.10.0 -> org.glassfish.jaxb:jaxb-runtime:jar:2.3.0-b170127.1453 -> org.glassfish.jaxb:jaxb-core:jar:2.3.0-b170127.1453 -> javax.xml.bind:jaxb-api:jar:2.3.0-b161121.1438 ... 我找到的唯一一个包含此特定构建的存储库是https://maven.java.net/#nexus-search;gav~javax.xml.bind~jaxb-api~2.3.0-b161121.1438~ 但如果您查看下面的文件,则可以看到从该存储库检索工件时出现的错误:.m2\repository\javax\xml\bind\jaxb-api\2.3.0-b161121.1438\jaxb-api-2.3.0-b161121.1438.pom.lastUpdated 这是因为 Maven 3.8.x 已经默认阻止 HTTP 存储库。您可以按如下方式取消阻止 HTTP 存储库:如何禁用 maven 阻止外部 HTTP 存储库? 但我建议不要取消阻止不安全(非 HTTPS)存储库。这需要在 maven settings.xml 中进行更改,从而使构建过程更加复杂。
我推荐的解决方案是在 pom.xml 文件中添加一个排除来忽略此特定的 jaxb-runtime 版本。
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>3.10.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.glassfish.jaxb</groupId>
                    <artifactId>jaxb-runtime</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

如果您需要在项目编译或运行时仍然需要jaxb-runtime,您可以通过在自己的pom.xml中添加新的依赖项来包含任何其他兼容版本。在这种情况下,您也可以使用依赖关系管理而不是排除。依赖管理 您可以从这里选择适合您的版本: https://search.maven.org/artifact/org.glassfish.jaxb/jaxb-runtime 请确保它满足ehcache的要求: <version>[2.2,3)</version>

1
谢谢,对我有用。按照指定的依赖创建了。还添加了 jaxb-runtime 版本 2.3.8。在修复问题之前,我通过命令行构建了我的 Maven 项目。似乎 IntelliJ 在编辑 pom.xml 文件时有时会使用缓存版本,当你使用 IntelliJ 构建项目时,它需要一点时间来加载最新的 Maven pom.xml - dutoitns
1
@dutoitns 是的,IntelliJ需要更新你的本地项目以匹配pom文件。你可以查看这些提示中是否有任何一个能帮助加快速度。如果这些都已经配置好或者你已经知道了,那么可能确实只是处理时间的问题。 - slindenau

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