Maven 3和JUnit 4编译问题:org.junit包不存在

我想用Maven构build一个简单的Java项目。 在我的pom文件中,我声明JUnit 4.8.2是唯一的依赖项。 仍然Maven坚持使用JUnit版本3.8.1。 我如何解决它?

这个问题performance在编译失败:“org.junit包不存在”。 这是因为我的源代码中的import语句。 JUnit 4. *中的正确包名是org.junit。*,而在版本3中。*是junit.framework。*

我想我已经在http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html上find了关于问题根源的文档,但是这里的build议似乎是针对Maven专家的。 我不明白该怎么做。

只要有完整的解决scheme来帮助访问者的答案:

所有你需要做的就是添加junit依赖到pom.xml 。 不要忘记<scope>test</scope>

 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> 

@Dennis Roberts:你说得对:我的testing类位于src / main / java。 另外,JUnit的POM中的“scope”元素的值是“test”,尽pipe这应该是这样的。 问题是,在Eclipse中创buildtesting类时,我一直sl </s>不安,导致它在src / test / java目录下的src / main / java中创build。 在运行“mvn eclipse:eclipse”之后,这在Eclipse的Project Explorer视图中变得更容易了,但是您的评论是我首先看到的。 谢谢。

我的问题是我的pom.xml中的一行,我有行<sourceDirectory>${basedir}/src</sourceDirectory>删除这行使maven使用常规结构文件夹,解决了我的问题

删除pom.xml中的范围标签为junit工作..

你是怎么声明这个版本的?

 <version>4.8.2</version> 

请注意这里解释的声明的含义(参见注释) :

当为Junit声明一个“正常”版本如3.8.2时,在内部这个表示为“allow anything,but prefer 3.8.2”。 这意味着当检测到冲突时,Maven被允许使用冲突algorithm来select最好的版本。 如果你指定了[3.8.2],这意味着只有3.8.2将被使用,没有别的。

强制使用4.8.2版本试试

 <version>[4.8.2]</version> 

由于您的项目中没有任何其他依赖项,因此不应有任何导致您的问题的冲突。 如果你能从版本库获取这个版本,第一个声明应该适合你。 你是否inheritance父pom的依赖关系?

我有同样的问题。 我所做的只是 – 从pom.xml文件中删除了junit 3.8的依赖关系,并为junit 4.8添加了一个新的依赖关系。 然后我做了maven干净和maven安装。 它做了诡计。 为了validation,在maven安装后,我去了project-> properties-build path-> maven dependencies,现在看到了junit 3.8的jar已经没有了,而是junit 4.8 jar被列出来了。 凉!!。 现在我的testing运行像一个魅力..希望这有助于某种方式..

将这个依赖关系添加到你的pom.xml文件中:

http://mvnrepository.com/artifact/junit/junit-dep/4.8.2

 <!-- https://mvnrepository.com/artifact/junit/junit-dep --> <dependency> <groupId>junit</groupId> <artifactId>junit-dep</artifactId> <version>4.8.2</version> </dependency> 

我有一个类似的Eclipse编译我的代码的问题,但Maven在每次编译testing时都失败了,尽pipe事实上JUnit在我的依赖项列表中,并且testing在/ src / test / java /中。

在我的情况下,我的依赖关系列表中有错误的JUnit版本。 我编写了JUnit4testing(带注释),但是把JUnit3.8.x作为我的依赖。 在JUnit版本3.8.x和4之间,他们将包名从junit.framework更改为org.junit,这就是为什么Maven仍然使用JUnit jar破坏编译的原因。

我仍然不完全确定为什么Eclipse成功编译。 它必须在classpath的某个地方有它自己的JUnit4副本。 希望这个替代解决scheme对人们有用。 在跟上Arthur的链接之后,我达到了这个解决scheme。

我也遇到了这个问题 – 我试图从一个来源的对象,它是在testing代码工作,但不是src代码。 为了进一步testing,我从testing中复制了一段代码并将其放到src代码中,然后立即删除了JUnit行,这样我就可以testing这个对象了。 然后突然我的代码不会编译。
问题是,当我放弃代码,Eclipse有用地解决了所有的类,所以我有JUnit调用来自我的src代码,这是不正确的。 我应该注意到顶部的关于未使用import的警告,但是我忽略了看到它们。
一旦我删除我的src文件中未使用的JUnit导入,它一切都运行良好。

我有我的文件在正确的地方,只是从JUnit依赖项中删除<scope>test</scope>解决了问题(我正在使用JUnit 4.12)。 我相信在编译阶段, test范围的依赖性被忽略了。 现在,即使我打电话给mvn test一切正常。

我的情况是一个简单的疏忽。

我将JUnit依赖声明放在POM文件中<dependencyManagement/>节点下的<dependencyManagement/>而不是<project/>中。 正确的方法是:

 <project> <!-- Other elements --> <dependencies> <!-- Other dependencies--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies> <project> 

默认情况下,maven分别查看这些文件夹的java和testing类 – src / main / java和src / test / java

当源代码中的testing类指定src时,会提到pom.xml中的junit依赖关系的作用域,因为test-org.unit不会被mavenfind。