Java 使用Ivy解决类路径问题

Java 使用Ivy解决类路径问题,java,unit-testing,classpath,ivy,easymock,Java,Unit Testing,Classpath,Ivy,Easymock,我用常春藤来管理我的依赖关系,这给我带来了easymock的问题 我的ivy.xml文件包含以下内容: <dependency org="easymock" name="easymock" rev="2.5.+" conf="compile,test -> default" /> 然后,我接着介绍了其他库依赖项,希望如果其他库使用其他版本的easymock,那么至少我的库得到了正确的版本 但在我解析之后,在eclipse中我可以看到easymock 1.2和2.5有两个版本

我用常春藤来管理我的依赖关系,这给我带来了easymock的问题

我的ivy.xml文件包含以下内容:

 <dependency org="easymock" name="easymock" rev="2.5.+" conf="compile,test -> default" />
然后,我接着介绍了其他库依赖项,希望如果其他库使用其他版本的easymock,那么至少我的库得到了正确的版本

但在我解析之后,在eclipse中我可以看到easymock 1.2和2.5有两个版本,然后首先列出了1.2

当我运行单元测试时,我在org.easymock.internal.RecordState的contstructor上得到一个java.lang.NoSuchMethodError,它接受org.easymock.internal.IMocksBehavior

这表明我正在使用EasyMock的旧版本


有什么想法可以绕过这个问题吗?

生成一份ivy依赖关系报告,以准确了解ivy在每个配置中使用的版本:

  <ivy:resolve/>
  <ivy:report todir='${ivy.reports}' graph='false' xml='false'/>
通常,当ivy遇到同一个库的两个版本时,它会逐出旧版本

要解决冲突解决不正确的问题,我建议阅读

使现代化 Ivy的冲突算法在过去一直对我很有效,但我必须承认我从未完全理解传递分析的一些复杂性。以下Maven文章值得一读:


生成ivy依赖项报告,以查看ivy在每个配置中使用的版本:

  <ivy:resolve/>
  <ivy:report todir='${ivy.reports}' graph='false' xml='false'/>
通常,当ivy遇到同一个库的两个版本时,它会逐出旧版本

要解决冲突解决不正确的问题,我建议阅读

使现代化 Ivy的冲突算法在过去一直对我很有效,但我必须承认我从未完全理解传递分析的一些复杂性。以下Maven文章值得一读:


我在ibiblio镜像中看到的最新easymock版本是2.0版。这意味着找不到2.5版本,而使用的是旧版本。检查您的解析器设置和修订。
它也有助于偶尔清理缓存ivy:cleancache,因此ivy被迫在repos中搜索修订版。

我在ibiblio镜像中看到的最新easymock版本是rev 2.0。这意味着找不到2.5版本,而使用的是旧版本。检查您的解析器设置和修订。
它也有助于偶尔清理缓存ivy:cleancache,因此ivy被迫搜索repos以查找修订版。

我没有使用ibiblio,我使用的是内部网共享的repository,我可以看到两个版本,ivy正在以旧版本覆盖新版本,它的作用正好相反。我发现的一个解决方法是在本地ivy缓存中用新jar文件的副本覆盖旧版本。类似于cp xxx.{new version}.jar xxx.{old version}.jar,非常糟糕,但我没有使用ibiblio,我使用的是内部网共享的存储库。我可以看到两个版本,而ivy正在以旧版本覆盖新版本,它的作用正好相反。我发现的一个解决方法是在本地ivy缓存中用新jar文件的副本覆盖旧版本。类似于cp xxx.{new version}.jar xxx.{old version}.jar的东西,很臭,但是很管用