Maven:在项目B中使用项目A的特定测试类

时间:2011-02-25 11:24:23

标签: maven junit dependencies project-structure

我有项目A和B,其中B需要A.内部项目AI有一个实用程序类UC,只能用于JUnit测试,因此,它位于项目A的src/test/java中。只要我在AI中编写测试可以访问UC。但是,如果我运行Maven并希望它在B中执行测试,我会收到编译器错误,因为在B中无法访问UC。

显然,当Eclipse编译某些东西时,Eclipse包括所有源文件夹中的所有类(即,当我在B中编写测试时,它知道UC),而Maven删除了A的最终版本中的所有测试类。

我的问题是:当我使用Maven运行测试时,我需要做什么才能在B中访问UC?

请理解我是Maven的新手,我认为已经提出了类似的问题。但是,我无法将那里写的内容转换成我的问题并修复它。

我希望我很清楚我正在尝试做什么......

3 个答案:

答案 0 :(得分:7)

在看了一些之后我终于找到了解决方案:

http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html 1

我偶尔会在其他问题上看到这种模式,所以我想我只是不明白那样......哦,好吧。 * * eyeroll

1 原始链接停止工作。我found it again on archive.org(不介意尴尬的布局)。

答案 1 :(得分:2)

maven-jar-plugin页面 - http://maven.apache.org/plugins/maven-jar-plugin/usage.html - 提到两种方式。简单的方法是创建一个测试jar工件,然后引用它。 (从官方页面公然抄袭的片段)

<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

然后在需要它的项目中使用test-jar类型和测试范围引用它:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>groupId</groupId>
      <artifactId>artifactId</artifactId>
      <type>test-jar</type>
      <version>version</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>

如果你需要做很多事情,你应该考虑将测试代码移到单独的项目中。

答案 2 :(得分:0)

我总是发现测试罐很尴尬。它们有点特殊,因为它们只有在新部署到存储库后才会被使用。否则其他项目看不到更改。这就是为什么我建议创建一些普通项目,您可以使用这些项目将测试助手放入,然后使用测试范围依赖项来引用它们。