【发布时间】: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