2014-03-26 173 views
1

我正在构建和部署的项目正在进行。我想补充一点,使用JWebUnit的一些代码,并使用以下Maven的代码,使之在:引入依赖关系打破了现有的依赖关系?

<dependency> 
    <groupId>net.sourceforge.jwebunit</groupId> 
    <artifactId>jwebunit-htmlunit-plugin</artifactId> 
    <version>3.2</version> 
    <scope>test</scope> 
</dependency> 

Maven的似乎是解决这个罚款,它的引进(我用的IntelliJ的一切,和它现在出现在“Maven项目”选项卡的“依赖关系”下,也出现在“项目”选项卡的“外部库”下)。

但是,当我将此依赖项放入时,IDE无法找到它(例如,如果我使用的是import net.sourceforge.jwebunit.junit.WebTester,则无法找到它)。

但更大的问题是,它实际上打破一些现有的代码 - 我有使用org.apache.commons.httpclient.HttpClient一些JUnit测试,现在在Maven的安装目标,我得到一个 NoClassDefFoundError - Could not initialize class该类。

如果我删除了JWebUnit依赖项,则Maven安装目标会成功退出。

我已经习惯了在引入新的依赖关系时看到依赖版本收敛的错误,我觉得像追逐这个'没有类def定义'错误可能是一个红鲱鱼,但我不确定一般类型Maven中可能导致它的问题。

编辑:在HttpClient的拉动依赖代码:

<dependency> 
    <groupId>commons-httpclient</groupId> 
    <artifactId>commons-httpclient</artifactId> 
    <version>3.1</version> 
</dependency> 

回答

1

jwebunit-htmlunit-plugin包括传递依赖它看起来像他们与你的一些相关性冲突的(可能是因为他们是不同的版本)。

Maven将类路径优先级放在早期声明的工件上。尝试将jwebunit移动到您的依赖项部分的末尾,或者至少在您拉入httpclient类的位置之后。或者,您可以手动排除某些传递依赖关系被拉入,但这可能很乏味。

至于你的IDE不允许在库上导入,请记住你在test范围内声明了这个。生产类不能看到test依赖关系。

+0

好的建议,因为我实际上遇到了依赖关系顺序导致的问题;然而,在这种情况下,试图将新的依赖关系放在开始处(最后开始)似乎没有帮助。 该项目的pom结构也非常简单 - 只有一个pom - 所以除了这个pom中的内容之外,不应该有其他任何东西被拉动。 (除非有可能将它放在某些依赖关系之间可能有帮助吗?) – user3183922

+0

@ user3183922:你能否更新你的问题以显示httpclient的Maven GAV?作为参考,jwebunit拉入httpunit,它引入了httpclient 4.3.2。 –

+0

是的,我将不得不弄清楚结果是什么...... – user3183922