我正在尝试使用常春藤将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的依赖关系表在version列中未显示任何内容。
可能是常春藤为其所有依赖项默认为1.1.4.flux-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存储库以克服moxy依赖关系:
<ibiblio name="eclipselink" m2compatible="true" root="http://download.eclipse.org/rt/eclipselink/maven.repo" />
尝试将该依赖项包含在所需的版本中,并在依赖项标签中使用“ force = true”。我不确定我是否完全正确,但是在ivy.xml文件中未显式声明最后一个依赖项,因此您可以显式添加它,并为其添加一个,即:
<dependency org="com.sun.jersey" name="jersey-servlet" rev="${jersey.version}" transitive="false" />
注意依赖项标记中的transitive属性。
这将阻止它带来所需的依赖关系(显然是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,而不是为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"/>
在原始依赖项之上。
如果将其放在后面,它将仍然无法覆盖该版本。