【问题标题】:What tools can I use to find out why maven3 searches for really old internal SNAPSHOTs?我可以使用哪些工具来找出为什么 maven3 会搜索真正旧的内部快照?
【发布时间】:2012-10-22 20:52:48
【问题描述】:

我正在尝试将我的公司从 maven2 升级到 maven3,一个阻塞是一种奇怪的现象,当我激活某个配置文件时,maven reactor 开始搜索大量旧的依赖信息(10 多分钟直到它用完记忆)。

如果存在具有范围的依赖项(例如“[3.0,)”),我已经看到了这种行为,但我很确定我已经清除了所有这些。

使用 mvn dependency:tree 和 mvn help:effective-pom 不会显示是否有任何范围依赖和对 [, ], () 的 grepping在 pom.xml 文件中什么都没有出现,所以我现在有点困惑下一步该戳哪里。

举个例子,在我的 pom 中,我有这个配置文件激活部分:

   <profile>
       <id>demo</id>
       <activation>
           <property>
               <name>client</name>
               <value>demo</value>
           </property>
       </activation>
       <dependencies>
           <dependency>
               <groupId>com.mycompany</groupId>
               <artifactId>client-demo</artifactId>
               <version>3.32.0-SNAPSHOT</version>
           </dependency>
       </dependencies>
   </profile>

然后当我在命令行上运行它时:

mvn -Dclient=demo jetty:run

输出是对我的客户端演示工件的每个历史快照的成千上万次 pom 数据搜索:

    ....snip.....
    Downloading:https://nexus.mycompany.com/nexus/content/groups/public/com/mycompany/client-demo/2.16.7-SNAPSHOT/client-demo-2.16.7-SNAPSHOT.pom 
    [WARNING] The POM for com.mycompany:client-demo:jar:2.16.7-SNAPSHOT is missing, no dependency information available 
    Downloading: https://nexus.mycompany.com/nexus/content/groups/public/com/mycompany/client-demo/2.16.8-SNAPSHOT/maven-metadata.xml 
    Downloading: https://nexus.mycompany.com/nexus/content/groups/public/com/mycompany/client-demo/2.16.8-SNAPSHOT/client-demo-2.16.8-SNAPSHOT.pom 
    [WARNING] The POM for com.mycompany:client-demo:jar:2.16.8-SNAPSHOT is missing, no dependency information available 
    Downloading: https://nexus.mycompany.com/nexus/content/groups/public/com/mycompany/client-demo/2.16.9-SNAPSHOT/maven-metadata.xml 
    Downloading: https://nexus.mycompany.com/nexus/content/groups/public/com/mycompany/client-demo/2.16.9-SNAPSHOT/client-demo-2.16.9-SNAPSHOT.pom 
    [WARNING] The POM for com.mycompany:client-demo:jar:2.16.9-SNAPSHOT is missing, no dependency information available 
    Downloading: https://nexus.mycompany.com/nexus/content/groups/public/com/mycompany/client-demo/2.16.10-SNAPSHOT/maven-metadata.xml 
    Downloading: https://nexus.mycompany.com/nexus/content/groups/public/com/mycompany/client-demo/2.16.10-SNAPSHOT/client-demo-2.16.10-SNAPSHOT.pom
    ....snip.....

编辑:: 更多信息。

此问题似乎纯粹与通过配置文件激活包含附加依赖项有关,而不与依赖项本身有关。例如,如果我摆脱配置文件并直接依赖 com.mycompany.client-demo-3.32.0-SNAPSHOT,则不会出现不良行为。所以这与反应堆处理配置文件激活依赖项的方式有关......我认为

【问题讨论】:

  • 你能显示你的 pom 的所有依赖项吗?
  • 我可以,但是这个工件是一个相当长的依赖层次结构的“末端”(即依赖于依赖于库的库,依赖于......你明白了)。我可以向您展示 mvn 依赖项:树,但那是配置文件后应用程序,这就是问题所在。明天早上我会发布 pom.xml,看看是否有帮助。
  • 问题是基于您的依赖项,这些依赖项是通过使用通过配置文件添加的依赖项添加的,这非常奇怪而且非常糟糕。此外,输出显示您正在尝试使用不在您的存储库(nexus)中的其他依赖项。除此之外,定义版本范围真的很糟糕。要测试这样的构建,最好清除整个本地存储库并尝试构建(mvn clean package)。
  • @khmarbaise - 为什么有条件地包含依赖项是一件坏事?它基本上是一个穷人的 OSGI。此外,我试图使用不在我的 nexus 存储库中的其他依赖项是不正确的:maven 出于某种原因正在扫描它们(这就是我发布这个问题的原因)并且没有找到它们,因为我们摆脱了 90 岁以上的 SNAPSHOT天。最后,我不认为我在任何地方定义版本范围,但如果我是,你知道我可以使用什么工具来追踪版本范围的来源吗?

标签: maven-3


【解决方案1】:

在你的情况下,我会尝试一些事情,比如help:effective-pom,看看是否有什么让我感到惊讶的事情。另外,mvn -X -Dclient=demo clean install 然后查看日志,看看您是否可以找出不良行为的来源。

我唯一的另一个想法是,也许某处存在循环依赖... client-demo:X-SHAPSHOT 取决于 other-lib:Y-SNAPSHOT,取决于 client-demo:(X-1)-SNAPSHOT 。 ..但我怀疑在这种情况下输出会有所不同。

当您构建客户端演示时会发生什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2013-05-06
    相关资源
    最近更新 更多