我正在尝试使用常春藤将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] ::::::::::::::::::::::::::::::::::::::::::::::
我的研究告诉我,焊接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默认为所有依赖项的weld-osgi-bundle的1.1.4.Final版本,而maven知道在哪里找到正确版本的依赖项?
有没有办法解决这个问题?
==&GT;使用现在工作的ivy.xml进行更新,基于Eyads评论:
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"
/>
答案 0 :(得分: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中,他们的父依赖关系中有一个“import”标签,这取决于另一个父pom(简而言之)。
所以Ivy不知道如何处理它,它使用当前版本1.1.8.Final而不是声明1.1.Final for api和spi的那个。
您要么解析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"/>
正好在原始依赖项之上。
如果你之后放了它,它仍然无法覆盖版本。
答案 1 :(得分:0)
这是一个错误https://issues.apache.org/jira/browse/IVY-1376。因此,解决方案可以是:等待修复并在等待时投票给错误。