一尘不染

常春藤2.3无法解决jersey-servlet 1.13(或1.11或1.12)的依赖关系

tomcat

我正在尝试使用常春藤将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"
/>

阅读 260

收藏
2020-06-16

共1个答案

一尘不染

尝试将该依赖项包含在所需的版本中,并在依赖项标签中使用“ 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"/>

在原始依赖项之上。

如果将其放在后面,它将仍然无法覆盖该版本。

2020-06-16