【问题标题】:Eclipse/Maven: JUnit tests not compiled when running themEclipse/Maven:运行 JUnit 测试时未编译它们
【发布时间】:2011-08-30 13:40:27
【问题描述】:

我正在使用 Maven 和 Eclipse(m2eclipse 插件)开发一个项目。我遇到了 JUnit 测试的问题:

有时,在 Eclipse 中运行它们时,它们不会被编译,而是使用旧的类文件。当我删除类文件时,我在 Eclipse 中得到ClassNotFoundExceptions。然后我必须使用mvn test-compile 或其他目标手动重新编译它们。

我还注意到测试的类文件有时会放在classes 子目录中,而不是test-classes

我真的不知道哪里出了问题。

JUnit java 文件位于src/main/java 中,并且命名正确(*Test.java)。

我是否必须始终通过 Maven 编译和运行它们?为什么当我想运行这些文件时 Eclipse 不编译它们? (有趣的是,有时确实如此。有时一切都很完美。)

【问题讨论】:

  • 在我将 Eclipse STS 和 AspectJ 插件升级到最新版本之后,我遇到了同样的问题。
  • 这里有同样的问题。也升级了,之前运行良好。
  • 按照惯例,测试类转到/src/test/java,而不是/src/main/java ...

标签: eclipse maven junit


【解决方案1】:

我在使用 STS Eclipse(Spring 开发变体)、m2e 和 JUnit 时遇到了同样的问题。解决方案是将src/test/java的输出文件夹设置为target/test-classes

  1. 右键单击 Package Explorer 中的 src/test/java 文件夹
  2. 选择构建路径 -> 配置输出文件夹
  3. 输入target/test-classes,点击确定

现在测试类中的更改已正确编译,您应该能够在 Eclipse 中运行 JUnit 测试。

问题在于 Eclipse 将单元测试编译到默认输出文件夹 target/classes 而 JUnit 插件正确地尝试从 test-classes 运行它们。

这个问题有几个重复:

【讨论】:

  • 要自动获得相同的结果,请右键单击项目,然后选择 Maven->Update Project Configuration...
  • @paulcm:感谢您的提示!当我手动更新 pom.xml、导入项目或刚刚打开一个项目时,“更新项目配置”似乎解决了 Eclipse 方面的许多问题。
  • 正如@paulcm blog.xemantic.com/2008/06/…所说的
  • 这解决了我的问题。几年后它仍然存在。
【解决方案2】:

除了下面的答案

  1. 右键单击 src/test/java 文件夹
  2. 选择构建路径 -> 配置输出文件夹
  3. 输入目标/测试类,点击确定

您应该检查以确保您的构建器设置正确,方法是右键单击您的项目并转到Properties -> Builder。如果您发现缺少构建器,则需要安装一个。在我的例子中,maven 项目有一个 AspectJ 依赖项,当我使用 Maven Eclipse 插件来构建我的 Eclipse 项目时,默认情况下它正在寻找一个 AspectJ 构建器。我安装了 AspectJ 开发工具,它解决了这个问题。

希望这会有所帮助!

【讨论】:

  • “the answer below”在基于投票排名的平台上并不能真正起作用,而“the answer”也不能真正起作用一个动态的多答案平台。
  • 谢谢。我今天升级到 Eclipse Luna,并且出于同样的原因遇到了这个确切的问题。我为 Luna 安装了开发版 AJDT(来自 download.eclipse.org/tools/ajdt/44/dev/update),我的项目现在使用 Eclipse 构建。
【解决方案3】:

对于您遇到的问题,最可能的解释是src/test/java 的输出文件夹配置不正确。

除了fixing this configuration manually,您可以让 m2eclipse 为您解决这个问题:只需右键单击项目并选择 Maven > 更新项目

【讨论】:

    【解决方案4】:

    还有一点:JUnit 测试类应该在 src/test/java 中,而不是 src/main/java 中,否则它们不会被 Maven 正确检测为测试类,它们将包含在打包的 jar 中而不是测试罐子。

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题。尝试了上述配置输出文件夹和 Maven>Update Project 的建议,但均未成功。最后将我的 testOutputDirectory 也更改为“build/classes”,现在单元测试正在被拾取并执行。

      终于找到问题的原因了。在我的 pom 中,我们还配置了 maven 编译器插件,如下所示

              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>2.3.2</version>
                  <configuration>
                      <source>1.6</source>
                      <target>1.6</target>
                      <outputDirectory>build/classes</outputDirectory>
                  </configuration>
             </plugin>
      

      outputDirectory 配置是不需要的,这是导致上述问题的原因。删除此标记后,junit 将被编译到 build>testclasses 文件夹,并且也在 maven 构建期间运行。 Yippee :)

      【讨论】:

        【解决方案6】:

        请检查“testSourceDirectory”路径,可以在您的 pom.xml。然后,将文件夹(在“testSourceDirectory”路径中配置)添加到eclipse构建路径中。

        请在下面的 pom.xml 中找到示例“testSourceDirectory”:

        <build>
            <testSourceDirectory>src/test/java</testSourceDirectory>
            <plugins>
             <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                  <source>1.8</source>
                  <target>1.8</target>
                </configuration>
              </plugin>      
            </plugins>
          </build>
        

        【讨论】:

          【解决方案7】:

          确保您的项目图标上有感叹号!就我而言,我忽略了有一个感叹号,例如: exclamation point on project icon

          打开“标记”透视图,然后根据提示解决问题。 what the "Markers" perspective show

          在我调用“mvn clean test”后,junit 测试类可以成功执行,因为它们没有引用在“Markers”透视图中警告的不可读 jar。因此,很容易忽略它..

          【讨论】:

          • 我有一个感叹号。 eclipse 中的错误视图说我缺少源文件夹 /src/test/resources 并且“在解决构建路径错误之前无法构建项目”。创建文件夹后,代码再次编译。
          【解决方案8】:

          对于从事 java-scala mix 项目的人来说,这是需要注意的。 即使按照如下所示的方式进行了配置,

          <build>
              <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
              <plugins>
              ...
                  <plugin>
                      <groupId>net.alchim31.maven</groupId>
                      <artifactId>scala-maven-plugin</artifactId>
                      <version>3.3.2</version>
                      <configuration>
                          <testSourceDir>${basedir}/src/test/scala</testSourceDir>
                          <testOutputDir>${basedir}/target/test-classes</testOutputDir>
                      </configuration>
                   </plugin>
              </plugins>
          </build>
          

          并执行 Maven > 更新项目,eclipse 尊重项目中 src/test/java 文件夹的输出目录,但是,不适用于 src/test/scala 文件夹。 (您可以通过右键单击特定源文件夹并选择 Build Path > Configure Output Folder... 来解决这个问题,这应该显示前一种情况下 pom 中指定的位置,但是,不适用于后一种情况。

          这已经是使用 scala 和 m2e 的已知错误,如下所述:http://scala-ide.org/docs/tutorials/m2eclipse/

          警告

          截至 2013 年 3 月,一个错误导致 src/main/scala 和 src/test/scala 都使用默认输出文件夹(target/classes)。 >在构建测试时这可能会令人困惑,因为它们的类文件不会像在命令行上构建时那样以目标/测试类结尾。您可以通过手动更改 src/test/scala 的输出文件夹来解决此问题。

          【讨论】:

            【解决方案9】:

            Eclipse 不希望其他任何东西与类文件混在一起。它假定如果您没有在 eclipse 中编辑文件,它没有更改并且不需要编译。我认为这个问题源于 eclipse 和 maven 共享一个输出目录。如果我的 mvn 构建失败,我经常看到这种情况,它将删除类文件作为干净但未编译的新文件的一部分。我认为最好的解决方案是为 mvn 和 eclipse 分别构建目录,但我从来没有研究过这个。

            【讨论】:

            • 我已经看到你在说什么,但不是这样。它就像 Eclipse 不会重新加载 JUnit 的类。我认为这是一个 AspectJ 问题而不是 Maven 问题。
            【解决方案10】:

            我的问题不是 JUnit 插件,而是我的 pom.xml 中的配置。

            在查看了这个问题的所有答案后,@Gulats 的回答暗示我应该尝试在我的 maven-compiler-plugin 部分设置一个testOutputDirectory,这样就成功了:

            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <testOutputDir>${basedir}/target/test-classes</testOutputDir>
              </configuration>
            </plugin>
            

            【讨论】:

              猜你喜欢
              • 2015-01-18
              • 2016-03-22
              • 2020-12-31
              • 1970-01-01
              • 2011-07-24
              • 2012-06-02
              • 2013-08-23
              • 2017-09-24
              • 2016-03-09
              相关资源
              最近更新 更多