当测试分类器设置为依赖项时,解决m2e工作空间分辨率缺少启动程序类路径中的测试类

时间:2013-10-02 22:11:32

标签: eclipse maven junit m2eclipse

当测试的pom将测试列为依赖项时,有没有人知道如何解决最近M2eclipse插件无法在junit启动程序的类路径中包含依赖项目test-classes目录的问题?

回复步骤

  • 创建pom项目providerProj,userProj
  • 在providerProj中创建TestUtils类并使用其测试存储
  • 将userProj设置为依赖于提供者的测试分类工件(provider-test.jar)
  • 添加从providerProj
  • 调用TestUtils类的userProj测试

在命令行上,所有工作都按预期进行。通过测试类路径找到TestUtils类。

  • 将项目导入eclipse
  • 将userProj test作为junit运行

失败找不到课程。

当我们检查测试的类路径时,看不到providerProj / test-classes文件夹。如果我们关闭providerProj并重新运行,它就可以工作,我们在类路径上看到provider-test.jar。

useProject
<dependency>
   <groupId>workspacetest</groupId>
   <artifactId>providerProj</artifactId>
   <classifier>test</classifier>
</dependency>

我们可以手动编辑启动器并添加必要的文件夹,但这并不理想。我或许可以说服m2eclipse转储src并测试输出到目标/类中,这会掩盖问题并打开我纠缠的代码。我可以fork m2eclipse并更改句柄以假设测试分类器dep意味着包括工作区解析目标/测试类。

你知道问题的解决方案吗?

由于

彼得

2 个答案:

答案 0 :(得分:1)

您需要使用<classifier>tests</classifier>

BTW,http://maven.apache.org/guides/mini/guide-attached-tests.html不鼓励使用测试分类器,<type>test-jar</type>是首选。

答案 1 :(得分:1)

我不久前想做类似的事情。问题是Eclipse和Maven处理的构建方式不同,而且现在Eclipse并没有很好地处理Maven的分类工件概念。这是我在this Eclipse bug report中找到的注释的释义。

我能够找到一个解决方法,因此Eclipse和Maven都可以运行。我将此添加到需要来自分类罐的物品的POM中。 (注意,我是为测试资源做的,而不是测试源,所以如果我在下面没有配置,你可能需要调整...)

<profile>
  <!-- Contents of this profile only needed to make this project work in Eclipse. -->
  <id>m2e</id>
  <activation>
    <property>
      <name>m2e.version</name>
    </property>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>include-test-source-eclipse</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>add-test-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>../myOtherProj/src/test/java</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>

将build-helper插件放在配置文件中可确保它仅在Eclipse中运行,而不是作为普通Maven构建的一部分。它不漂亮,但它起作用,至少在Eclipse Juno和m2e 1.3.1.20130219-1424中。

我对配置的唯一问题是,有时Eclipse似乎没有找到我在提供者项目中所做的更改。修复是运行Maven - &gt;根据提供者项目和任何项目更新项目。我并没有经常更换资源,这对我来说是个大问题。