Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 3和JUnit 4编译问题:包org.JUnit不存在_Maven_Junit_Junit4_Maven 3_Junit3 - Fatal编程技术网

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

Maven 3和JUnit 4编译问题:包org.JUnit不存在,maven,junit,junit4,maven-3,junit3,Maven,Junit,Junit4,Maven 3,Junit3,我正在尝试用Maven构建一个简单的Java项目。在我的pom文件中,我声明JUnit4.8.2是唯一的依赖项。Maven仍然坚持使用JUnit版本3.8.1。我怎么修理它 问题表现为编译失败:“package org.junit不存在”。这是因为我的源代码中有import语句。JUnit4.*中正确的包名是org.JUnit.*而在版本3.*中正确的包名是JUnit.framework* 我想我已经找到了关于问题根源的文档,但其中的建议似乎是针对专业人士的。我不明白该怎么办。您是如何声明版本的

我正在尝试用Maven构建一个简单的Java项目。在我的pom文件中,我声明JUnit4.8.2是唯一的依赖项。Maven仍然坚持使用JUnit版本3.8.1。我怎么修理它

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


我想我已经找到了关于问题根源的文档,但其中的建议似乎是针对专业人士的。我不明白该怎么办。

您是如何声明版本的

<version>4.8.2</version>
4.8.2
了解本声明的含义:

在为Junit声明“正常”版本(如3.8.2)时,内部表示为“允许任何内容,但更喜欢3.8.2”。这意味着当检测到冲突时,允许Maven使用冲突算法选择最佳版本。如果指定[3.8.2],则表示只使用3.8.2,而不使用其他内容

要强制使用4.8.2版,请尝试

<version>[4.8.2]</version>
[4.8.2]

由于您的项目中没有任何其他依赖项,因此不应该存在导致问题的任何冲突。如果您能够从存储库获取此版本,那么第一个声明应该适用于您。您是否从父pom继承依赖项?

@Dennis Roberts:您完全正确:我的测试类位于src/main/java中。另外,JUnit的POM中的“scope”元素的值是“test”,尽管它应该是这样的。问题是我在Eclipse中创建测试类时太草率了,导致它是在src/main/java而不是src/test/java中创建的。在运行“mvn Eclipse:Eclipse”之后,在Eclipse的Project Explorer视图中更容易看到这一点,但您的评论让我第一次看到它。谢谢。

我在Eclipse编译代码时遇到了类似的问题,但是每次编译测试时Maven都失败了,尽管JUnit在我的依赖项列表中,测试在/src/test/java/中

在我的例子中,我的依赖项列表中有错误的JUnit版本。我编写了JUnit4测试(带有注释),但依赖JUnit3.8.x。在JUnit版本3.8.x和4之间,他们将包名从JUnit.framework更改为org.JUnit,这就是为什么Maven仍然使用JUnit jar中断编译


我仍然不能完全确定Eclipse为什么成功编译。它必须在类路径的某个地方有自己的JUnit4副本。希望这个替代方案对人们有用。我是在遵循Arthur上面的链接后得出这个解决方案的。

我也有同样的问题。我所做的只是从pom.xml文件中删除了JUnit3.8的依赖项,并为JUnit4.8添加了一个新的依赖项。然后我进行了maven清理和maven安装。它成功了。为了验证,在maven安装之后,我去了project->properties build path->maven dependencies,看到junit 3.8 jar已经不存在了!,而是列出JUnit4.8JAR。酷!!。现在我的测试运行得很顺利。。希望这能有所帮助。

只需回答一个完整的解决方案就可以帮助访问者:

您只需将junit依赖项添加到
pom.xml
。不要忘记
测试


朱尼特
朱尼特
4.11
测试

将此依赖项添加到您的
pom.xml
文件中:


朱尼特
青年部
4.8.2

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

删除pom.xml中用于junit的scope标记有效。

默认情况下,maven分别为java和测试类查看这些文件夹- src/main/java和src/test/java


当src是用源代码下的测试类指定的,并且pom.xml中junit依赖的范围被称为test-org.unit时,maven将找不到它。

我也遇到了这个问题-我试图从源代码中提取一个对象,它在测试代码中工作,而不是在src代码中工作。为了进一步测试,我从测试中复制了一个代码块并将其放入src代码中,然后立即删除JUnit行,这样我就知道了测试是如何拉入对象的。然后我的代码突然无法编译
问题是,当我将代码放入时,Eclipse帮助解决了所有类,因此我有来自src代码的JUnit调用,这是不正确的。我本应该注意到顶部关于未使用进口的警告,但我忽略了它们

一旦我在src文件中删除了未使用的JUnit导入,它就运行得很好

我将文件放在了正确的位置,只需从JUnit依赖项中删除
test
就解决了这个问题(我使用的是JUnit 4.12)。我相信在
测试
范围中,依赖性只是在编译阶段被忽略了。现在,即使在我调用
mvn测试时,一切都正常了

我的案例只是一个简单的疏忽

我将JUnit依赖项声明放在
节点下的
中,而不是POM文件中的
。正确的方法是:

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

朱尼特
朱尼特
4.11

在父项目注入依赖项的“test-utils”项目(向JUnit添加特性、规则和断言)子项目中,我遇到了一个非常类似的问题。 依赖于org.junit.rules包的类位于src/main/java中

因此,我在junit上添加了一个不带测试范围的依赖项,它解决了这个问题:

test util项目的pom.xml:

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

朱尼特
朱尼特
父项目的pom.xml:

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

朱尼特
朱尼特
测试

我也有如下所示的问题

compile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test:runner:0.5'
Warning:Conflict with dependency 'com.android.support:support-annotations'. 
Resolved versions for app (25.1.0) and test app (23.1.1) differ. 
See http://g.co/androidstudio/app-test-app-conflict for details.
configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-annotations:23.1.1'
    }
}
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.9.1</version>
</dependency>