我正在开发一个可以构建和部署的项目。我试图添加一些使用JWebUnit的代码,并使用以下Maven代码将其引入:
<dependency>
<groupId>net.sourceforge.jwebunit</groupId>
<artifactId>jwebunit-htmlunit-plugin</artifactId>
<version>3.2</version>
<scope>test</scope>
</dependency>
Maven似乎解决了这个问题并将其全部纳入(我使用的是Intellij,它现在出现在&#39; Devendencies&#39;&#39; Maven Projects&#39;&#39; Maven Projects&#39; ;选项卡,以及项目选项卡中的外部库&#39;。
但是,当我带来这种依赖关系时,IDE无法找到它(例如,如果我使用import net.sourceforge.jwebunit.junit.WebTester
,它就无法找到它。)
但更大的问题是它实际上破坏了一些现有的代码 - 我有一些使用org.apache.commons.httpclient.HttpClient的JUnit测试,现在在Maven的安装目标上我得到了一个
该班级NoClassDefFoundError - Could not initialize class
。
如果我删除了JWebUnit依赖项,Maven安装目标将成功退出。
我常常在带来新的依赖关系时看到有关依赖关系版本收敛的错误,我觉得要追逐这个&#39;没有找到类定义&#39;错误可能是一个红色的鲱鱼,但我不确定Maven中可能导致它的一般类型的问题。
编辑:拉入HttpClient的依赖关系代码是:
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
答案 0 :(得分:1)
jwebunit-htmlunit-plugin
包含传递依赖,看起来它们与某些依赖项冲突(可能是因为它们是不同的版本)。
Maven将classpath优先级放在先前声明的工件上。尝试将jwebunit
移动到依赖项部分的末尾,或者至少在您引入httpclient
类之后。或者,您可以手动排除某些传递依赖项被拉入,但这可能很乏味。
至于您的IDE不允许在库中导入,请记住您在test
范围内声明了这一点。生产类无法看到test
依赖项。