Maven错误:包org.junit不存在。

91

我正在尝试使用Maven创建Javadoc,但失败了。执行验证操作时也会失败。

mvn verify

我遇到了以下错误:

(...)
    [INFO] -------------------------------------------------------------
    [ERROR] COMPILATION ERROR : 
    [INFO] -------------------------------------------------------------
    [ERROR] /home/miquel/creaveu/createOmegaMatrix/src/main/java/edu/url/salle/gtm/hnm/dataStructures/HFrame.java:[6,23]
package org.junit does not exist
    [ERROR] /home/miquel/creaveu/createOmegaMatrix/src/main/java/edu/url/salle/gtm/hnm/dataStructures/HFrame.java:[6,0]
static import only from classes and interfaces
    (···)

在我的pom.xml文件中,我有以下几行:

<dependency>
  <groupId>org.junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.2</version>
  <scope>test</scope>
</dependency>

我的本地代码库包含了JUnit的Jar文件:

miquel@ubuntu:~/creaveu/createOmegaMatrix$ ls -l /home/miquel/.m2/repository/org/junit/junit/4.8.2/
total 248
**-rw-r--r-- 1 miquel miquel 237344 2012-09-13 11:01 junit-4.8.2.jar**
-rw-r--r-- 1 miquel miquel    236 2012-09-13 11:13 junit-4.8.2-javadoc.jar.lastUpdated
-rw-r--r-- 1 miquel miquel      0 2012-09-13 11:13 junit-4.8.2-javadoc.jar-not-available
-rw-r--r-- 1 miquel miquel    458 2012-09-12 18:35 junit-4.8.2.pom
-rw-r--r-- 1 miquel miquel    236 2012-09-13 11:13 junit-4.8.2-sources.jar.lastUpdated
-rw-r--r-- 1 miquel miquel      0 2012-09-13 11:13 junit-4.8.2-sources.jar-not-available
-rw-r--r-- 1 miquel miquel    163 2012-09-13 11:22 _maven.repositories
miquel@ubuntu:~/creaveu/createOmegaMatrix$

这段代码没问题,因为在我的笔记本电脑上,我现在无法访问,我可以运行:

mvn javadoc:javadoc
mvn verify

没有问题,而且测试在Eclipse IDE中也可以工作。


相同的症状,不同的原因:https://dev59.com/wG025IYBdhLWcg3wtoQ_ - Abdull
5个回答

181

好的,你已经在仅适用于测试类(位于 src/test/java 中)的依赖项中声明了 junit ,但是你正试图在主类(位于 src/main/java 中)中使用它。

要么不要在主类中使用它,要么删除 <scope>test</scope>


2
该死!!!没错,这解决了验证目标的问题。现在我有关于Latex的其他javadoc问题。所以问题解决了!!!感谢@Andrew。 - theme
当我从我的POM文件中删除test范围时,我的测试用例永远不会被执行,尽管我不会像以前一样收到任何错误(与上述相同)。我的测试也在src/test/java下,并且我有一些库位于src/main/java下。 - Paresh
1
如果子模块在测试层次结构之外使用junit,则可以使用<scope>test</scope>范围限定父pom,并使用<scope>compile</scope>范围限定子pom。 - Daniel
我在想,为什么在使用JUnit依赖的测试范围时,会得到以下错误:.../src/test/java/com/...RuleTest.java:[3,24] package org.junit does not exist。 - Panu Haaramo
谢谢!我为这个问题苦苦挣扎了好几个小时。 - LearnerAllTheWay
仍然存在相同的问题。 - fsalazar_sch

38

我通过插入这些代码来解决了这个错误:

<dependency>
  <groupId>junit</groupId>     <!-- NOT org.junit here -->
  <artifactId>junit-dep</artifactId>
  <version>4.8.2</version>
  <scope>test</scope>
</dependency>

将其添加到<dependencies>节点中。

更多细节请参考:http://mvnrepository.com/artifact/junit/junit-dep/4.8.2


1
这是一个糟糕的解决方案,因为您在此依赖项部分中省略了 <scope>test</scope> 标签。这意味着测试将被编译到您的生产代码中。 - LightCC

15
如果您正在使用Eclipse,请注意POM依赖项以及Eclipse构建路径中的Junit依赖项。
如果您选择使用Junit4,则Eclipse将使用org.junit包创建TestCase,但是默认情况下您的POM使用Junit3(junit.framework包),这就是产生冲突的原因,如此图片所示:
只需更新POM文件中的Junit依赖项为Junit4或Eclipse BuildPath为Junit3即可。

好的,我两年前问过这个问题,现在我已经不再从事这方面的工作了,至少目前是这样。但还是谢谢你的回答。不知道是否需要将它标记为已关闭。 - theme
1
@dwjohnston 太好了!虽然我没有使用Maven,但很高兴看到我的问题能帮助到其他人;)同时感谢Grubhart的回答。 :) - theme

10
在我的情况下,罪魁祸首是没有在由Eclipse Maven项目生成的pom.xml文件中区分主要和测试源文件夹。
<build>
    <sourceDirectory>src</sourceDirectory>
    ....
</build>

如果你在pom文件中覆盖了默认的源文件夹设置,那么你必须明确设置主要的和测试的源文件夹!!!

<build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    ....
</build>

删除源目录配置对我有用。但是你的评论也帮了我很多。 - Karthik P
我发现如果你使用标准的src/main/java和src/test/java位置,那么你可以省略两个目录设置。 - Solx

1

我通过结合上述一些技巧和在Stackoverflow其他地方找到的想法来解决了这个问题。

通过将以下内容添加到我的pom.xml文件中,使用Maven获取当前最新版本的Junit。

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.0-M1</version>
    <scope>test</scope>
</dependency>   

pom.xml 中指定主代码和测试代码的不同源目录。

<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>

然而,最重要的变化是我尝试在我的源代码中创建一些测试方法,该代码包含了这个导入语句。

import org.junit.jupiter.api.Test; 

当我从主源文件中删除了所有测试功能后,它又开始正常工作了。

这样做可以使代码更整洁,因为现在所有的测试都清晰地与主构建分离开来。


1
谢谢,我是一个Java+Maven的新手,需要学习sourceDirectory和testSourceDirectory的存在。 - Hettomei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接