我们有几个应用程序作为许多模块;我们一直在使用NetBeans。我试图将开发转移到日食。
所有项目都是使用Maven构建的。其中一个使用dbunit,也使用POI。当我尝试在eclipse中编译它时,它给我一个错误的方法签名错误。用maven和命令行构建构建NetBeans都不会给我这个错误。
我发现编译器试图使用比我们使用的版本更旧的POI版本进行编译。根据dbunit的maven存储库信息,POI的特定版本在编译范围中被指定为dbunit的依赖项。我不明白为什么会把那个版本的POI拉到我的编译中,因为我使用的是dbunit,而不是编译它。
我也不明白为什么它会被eclipse吸引而不是其他两个编译操作。
我已经看到了关于SO和eclipse错误报告网站上的一些评论,关于eclipse如何仅使用一个类路径,并且它很难改变,并且没有计划改变。
如果这是真的,那么其他人如何应对?我无法拥有世界上(甚至在我的城市)唯一一个使用具有与项目编译冲突的编译依赖项的库的项目。是否有m2e补丁或eclipse解决方法,希望不涉及修改所有20个pom.xml文件的东西?
答案 0 :(得分:0)
编译依赖项是可传递的。 Maven2Eclipse插件只使用树中的一个依赖项(可能与Maven不同)。
为了安全起见,在使用dbunit时排除POI:
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</exclusion>
</exclusions>
</dependency>
如果您使用较新版本的dbunit(如2.4.3),则对POI的依赖性是可选的,这意味着不具有传递性。