1

我们已经在一个 maven (3.0.5) 项目上工作了几个月,在建立新的开发环境(没有本地 maven 存储库)时突然出现这个错误:

[ERROR] Failed to execute goal on project [100's of dependencies truncated]: Failed to read artifact descriptor for org.apache.httpcomponents:httpclient:jar:${httpcomponents.version}: Could not transfer artifact org.apache.httpcomponents:httpclient:pom:${httpcomponents.version} from/to nexus (http://bob.premitech.net:8081/nexus/content/groups/public): Illegal character in path at index 96: http://bob.premitech.net:8081/nexus/content/groups/public/org/apache/httpcomponents/httpclient/${httpcomponents.version}/httpclient-${httpcomponents.version}.pom -> [Help 1]

我正在使用一个多模块项目,您可能认为错误的显而易见的事情是 ${httpcomponents.version} 没有定义。除非它在父 pom 中定义为 4.2.5。更奇怪的是,硬编码版本而不是使用属性不会更改错误消息。

我什至尝试过完全删除 http 组件依赖项。这也无济于事。唯一有效的方法是将正确的依赖项手动复制到本地 maven 存储库 (.m2) 中,这完全违背了首先使用 maven 的目的。

有人知道这里可能出了什么问题吗?是否有某种我不知道的缓存机制?

4

1 回答 1

2

正如您所说,即使在您的 POM 中对版本进行硬编码仍然会给您这样的错误,在我看来,“不正确”的版本来自其他依赖项。IIRC,依赖的占位符在 Maven 中不会被替换。

例如,你的foo项目依赖于你自己的bar-framework,两者foobar-framework依赖于httpcomponent. 在bar-framework您还使用该版本的属性占位符。在这种情况下,如果您bar-framework在新机器上构建有问题,bar-frameworkPOM 包含未替换的httpcomponent版本属性。那么即使你的foo项目是正确的,由于传递依赖,Maven 仍然需要解析不正确的 httpcomponent。

试着做mvn dependency:tree看看你是如何在你的项目中获得依赖的。这可能会给出一些提示。

于 2013-09-04T08:47:12.927 回答