使用常春藤的类路径问题

时间:2011-02-15 15:32:29

标签: java unit-testing classpath ivy easymock

我正在使用Ivy来管理我的依赖项,这让我遇到了easymock的问题

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

 <dependency org="easymock" name="easymock" rev="2.5.+" conf="compile,test -> default" />

然后我跟随其他库依赖项,希望如果其他一些库使用另一个版本的easymock,那么至少我的库得到正确的。

但是在我解决之后,在eclipse中我可以看到有2个版本的easymock(1.2和2.5),然后1.2首先列出。

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

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

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

生成常春藤依赖关系报告,以确切了解常春藤正在使用的版本,对于每种配置:

  <ivy:resolve/>
  <ivy:report todir='${ivy.reports}' graph='false' xml='false'/>

通常当常春藤遇到同一个库的两个版本时,它会“逐出”旧版本。

要修复错误解决冲突的问题,我建议您阅读doco

更新

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

http://guntherpopp.blogspot.com/2011/02/understanding-maven-dependency.html

答案 1 :(得分:1)

我在ibiblio镜子中看到的最新easymock是rev 2.0。这意味着,找不到2.5并使用旧版本。检查解析器设置和修订。 它还有助于偶尔清理缓存(常春藤:cleancache),因此常春藤被迫搜索repos进行修订。