我依赖于我的项目:
<dependency org="org.springframework"
name="org.springframework.web.servlet"
rev="3.1.2.RELEASE" />
它想要拉这样的东西:
org.apache.commons#com.springsource.org.apache.commons.logging;1.1.1
会导致使用较新版本的commons-logging的其他库出现问题。所以我通过这样排除它来解决它:
<exclude org="org.apache.commons"
module="com.springsource.org.apache.commons.logging" />
但不得不这样做会破坏Ivy内置的冲突管理的目的。有没有更好的方法来处理这个问题,还是我必须手动追踪所有潜在的冲突?
免责声明:我对常春藤和依赖管理都很陌生,所以我不知道这个概念是否也延伸到了Maven世界。如果没有,我为错误标记道歉。
答案 0 :(得分:2)
我假设您使用ivysettings.xml
文件中的EBR repositories。
您将获得这些com.springsource
依赖项,因为EBR中的所有库都是有效的OSGi包,而SpringSource通过在包名称前加com.springsource
前缀来修改包中的普通jar。
另外,我假设您的项目没有使用OSGi容器,并且您实际上并不需要在项目中使用OSGi包。要回到解析普通jar而不是OSGi包,你不需要使用EBR存储库。
在ivysettings.xml
评论中指向EBR存储库的解析器,例如:
<!-- <resolvers>
<chain name="chained">
<url name="com.springsource.repository.bundles.release">
<ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
<url name="com.springsource.repository.bundles.external">
<ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
</chain>
</resolvers> -->
并用ibiblio解析器替换它们:
<settings defaultResolver="central"/>
<resolvers>
<ibiblio name="central" m2compatible="true"/>
</resolvers>
此外,您需要将最初从EBR存储库获取的任何依赖项更改为通常的Maven中央存储库所具有的格式。例如,您对org.springframework.web.servlet
的依赖关系需要在ivy.xml
中更改为:
<dependency org="org.springframework"
name="spring-web"
rev="3.1.2.RELEASE" />
通过上述更改,Ivy还将解析Maven central的依赖关系。