2

我正在尝试使用 ivy 在我的项目中包含 jersey-servlet。我的依赖看起来像这样:

<dependency org="com.sun.jersey"    name="jersey-servlet"   rev="${jersey.version}"/>

...但我遇到了一些未解决的依赖项:

[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]       ::          UNRESOLVED DEPENDENCIES         ::
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]       :: org.eclipse.persistence#org.eclipse.persistence.moxy;2.3.2: not found
[ivy:resolve]       :: org.jboss.spec.javax.interceptor#jboss-interceptors-api_1.1_spec;${interceptor.api.version}: not found
[ivy:resolve]       :: javax.inject#javax.inject;${atinject.api.version}: not found
[ivy:resolve]       :: org.jboss.weld#weld-api;1.1.4.Final: not found
[ivy:resolve]       :: org.jboss.weld#weld-spi;1.1.4.Final: not found
[ivy:resolve]       ::::::::::::::::::::::::::::::::::::::::::::::

我的研究告诉我weld-spi/api 1.1.4.Final不存在。看起来这些是weld-osgi-bundle-1.1.4.Final.jar 的依赖项。但是,如果您打开那个 jar 并在 META-INF 目录中四处寻找,就会发现确实存在对weld-spi/api 1.1.Final的引用。

另外,在 maven 存储库中,weld-osgi-bundle 1.1.4.Final 的依赖关系表在版本列中没有显示任何内容。

是不是 ivy 的所有依赖项都默认使用 1.1.4.Final 版本的weld-osgi-bundle,而 maven 知道在哪里可以找到正确版本的依赖项?

常春藤有办法解决这个问题吗?

==> 根据 Eyads 的评论,使用现在工作的 ivy.xml 进行更新:

ivy.xml 具有以下依赖项:

<dependency org="com.sun.jersey" name="jersey-servlet" rev="${jersey.version}" transitive="false"/>
<dependency org="org.jboss.weld" name="weld-api" rev="1.1.Final" force="true"/>

请注意,我还需要添加 eclipselink repo 以克服 moxy 依赖项:

<ibiblio
name="eclipselink"
m2compatible="true"
root="http://download.eclipse.org/rt/eclipselink/maven.repo"
/>
4

2 回答 2

2

尝试在依赖项标记中使用“force=true”将该依赖项包含在您想要的版本中。我不确定我是否完全正确,但是最后一个依赖项没有在您的 ivy.xml 文件中明确声明,因此您可以明确添加它并为您拥有的那个,即:

<dependency org="com.sun.jersey"    name="jersey-servlet"   rev="${jersey.version}" transitive="false" />

注意依赖标签中的传递属性。

这将阻止它带来它想要的依赖(显然是weld-api)。

===============

更新:

我们现在在我的公司遇到同样的问题,但原因不同。我们试图包含另一个依赖项

<dependency org="org.jboss.weld.se" name="weld-se-core" rev="1.1.8.Final" />

这将尝试检索修订版为 1.1.8.Final 的weld-api 和weld-spi。我们看到的原因是,在 maven pom 中,它们的父依赖项有一个“导入”标签,它依赖于另一个父 pom(简而言之)。

所以 Ivy 不知道如何处理它,它使用当前版本 1.1.8.Final 而不是为 api 和 spi 声明 1.1.Final 的版本。

您可以解析 IVY 并从缓存中删除文件夹 org.jboss.weld.se 但将 org.jboss.weld 保留在其中,然后再次解析。

或者你可以添加这些:

<dependency org="org.jboss.weld" name="weld-spi" rev="1.1.Final" force="true"/>
<dependency org="org.jboss.weld" name="weld-api" rev="1.1.Final" force="true"/>

就在原始依赖项之上。

如果你把它放在后面,它仍然无法覆盖版本。

于 2012-07-29T21:25:57.753 回答
0

这是一个错误https://issues.apache.org/jira/browse/IVY-1376。所以一个解决方案可以是:等待修复并在等待时投票给错误。

于 2012-11-23T09:51:32.083 回答