maven - 存储库版本策略 : ignore missing poms?

标签 maven nexus

仔细看了看

让我感到困惑的是,maven 正在搜索这个文件的 repo,但没有找到它。我不明白为什么不同的本地存储库(POM 文件中列出的 6 个存储库之一)应该是个问题。

我的假设是问题出在正在发布的存储库的版本策略中。这肯定是错误所暗示的,但旧存储库也有发布策略,无论如何我没有将快照存储在那里只是在寻找它,因为它是存储在 Maven Central 上的依赖项的依赖项不是找到了。

有没有办法可以更改策略以允许在其中搜索快照或阻止 Maven 在该存储库中搜索快照?


我们已将内部存储库从服务器上移至另一个服务器,并将其从 2.14.9-01 升级到 3.12.1-01。

我们已经使用代理迁移了 Artifact 。我使用新的 repo 构建了几个简单的项目,一切看起来都很好。

但是在一个应用程序上我收到了这个错误

[INFO] ------------------------------------------------------------------------
Downloading: http://reposerver:8081/repository/releases/org/glassfish/javax.el/3.0.1-b06-SNAPSHOT/javax.el-3.0.1-b06-SNAPSHOT.pom

Downloading: http://reposerver:8081/repository/releases/org/glassfish/javax.el/3.0.1-b07-SNAPSHOT/javax.el-3.0.1-b07-SNAPSHOT.pom

Downloading: http://reposerver:8081/repository/releases/org/glassfish/javax.el/3.0.1-b08-SNAPSHOT/javax.el-3.0.1-b08-SNAPSHOT.pom

...

[INFO] -----------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO]  ------------------------------------------------------------------------

[ERROR] Failed to execute goal on project : 
Could not resolve dependencies for project : 
Failed to collect dependencies at org.eclipse.jetty:jetty-
jsp:jar:9.2.19.v20160908 -> org.glassfish.web:javax.servlet.jsp:jar:2.3.2 -> 
org.glassfish:javax.el:jar:3.0.1-b06-SNAPSHOT: 

Failed to read artifact descriptor for org.glassfish:javax.el:jar:3.0.1-b06-SNAPSHOT: 
Could not transfer artifact org.glassfish:javax.el:pom:3.0.1-b06-SNAPSHOT from/to releases.new 
(http://reposerver:8081/repository/releases/): Failed to transfer file:
 http://reposerver:8081/repository/releases/org/glassfish/javax.el/3.0.1-b06-SNAPSHOT/javax.el-3.0.1-b06-SNAPSHOT.pom. 

Return code is: 400 , ReasonPhrase:Repository version policy: RELEASE does 
not allow version: 3.0.1-b06-SNAPSHOT. -> [Help 1]

如果我回到旧的 repo 协议(protocol),我一点问题都没有。我快速尝试更改码头版本并排除 javax.el 以避免使用快照依赖项并构建项目,但我似乎无法在不导致灾难性构建失败的情况下轻松执行此操作。

再次检查我在使用旧存储库时错过了这个持续警告

[WARNING] The POM for org.glassfish:javax.el:jar:3.0.1-b06-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for org.glassfish:javax.el:jar:3.0.1-b07-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for org.glassfish:javax.el:jar:3.0.1-b08-SNAPSHOT is missing, no dependency information available

我已经尝试添加这个似乎有快照的 repo 协议(protocol)

    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>

但这没有什么区别。

据我所知,maven 正在尝试所有 repos 以递归地查找所有依赖项,因为我的本地 repo 是最后一个,它在检查我的本地 repo 后报告错误。关于快照策略的错误是一条错误消息,问题是它无法找到 javax-el jar 的 POM,因此无法继续寻找依赖项。我不明白为什么它在查看一个 repo 协议(protocol)后忽略,而在指示它查看另一个 repo 协议(protocol)时却失败了?

在我看来,成功与失败之间的唯一区别是

成功:

 <repository>
     <id>releases</id>
     <name>App Repository</name>
     <url>http://oldserver:8081/repository/releases/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
    <repository>
        <id>snapshots</id>
        <name>App Repository</name>
        <url>http://newserver:8081/repository/snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>

失败

    <repository>
         <id>releases</id>
         <name>App Repository</name>
         <url>http://newserver:8081/repository/releases/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
        <repository>
            <id>snapshots</id>
            <name>App Repository</name>
            <url>http://newserver:8081/repository/snapshots/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>

这是新 Nexus 存储库上的设置吗?目前我希望有一个简单的 like for like fix,但如果你认为我需要更改我正在调用的依赖项,那很好

Jetty 依赖调用

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-webapp</artifactId>
    <version>9.0.6.v20130930</version>
</dependency> 

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>apache-jstl</artifactId>
    <version>9.2.19.v20160908</version>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jsp</artifactId>
    <version>9.2.19.v20160908</version>     
</dependency>

最佳答案

好吧,我还没有找到为什么 Nexus 的版本似乎表现不同的答案(这是我对根本原因的误解!)

我已经用一个简单的 pom mod 修复了它(我想我以前试过,但我一定是绕了一些愚蠢的圈子)

<dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-jsp</artifactId>
        <version>9.2.19.v20160908</version>
        <exclusions>
                <exclusion>
                 <groupId>org.glassfish</groupId>
                 <artifactId>javax.el</artifactId>
            </exclusion>
        </exclusions>       
    </dependency>

     <!-- https://mvnrepository.com/artifact/org.glassfish/javax.el -->
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.el</artifactId>
        <version>3.0.0</version>
    </dependency>

关于maven - 存储库版本策略 : ignore missing poms?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51403167/

相关文章:

java - Spring boot在添加mongo-java-driver maven依赖时尝试连接mongo

java - 配置Elasticsearch到java SpringBoot应用程序

encryption - 如何在Gradle中使用加密密码访问Maven存储库

typescript - 无法让 ts-node 编译带有可选链接的代码

jsf - 将 JSF-Maven 应用程序从 Eclipse 直接部署到 tomcat

java - 如何让 maven 获取发布父 pom 而不是最新的?

java - 我如何告诉 NEXUS 使用自定义信任库

java - Docker 自动构建从 Maven Sonatype Nexus 存储库下载私有(private) jar

maven - 使用 Grails Maven 插件跳过集成测试

maven - Sonatype Nexus 可以配置为限制用户可以部署哪些 Artifact 吗?