9

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

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

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

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

我希望很清楚我想要做什么......

4

3 回答 3

7

在看了更多之后,我终于找到了解决方案:

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

我偶尔会在其他问题上看到这种模式,所以我想我只是没有那样理解......哦,好吧。*眼珠*

1该原始链接停止工作。我在archive.org 上再次找到了它(不要介意尴尬的布局)。

于 2011-02-25T12:22:09.457 回答
2

maven-jar-plugin 页面 - http://maven.apache.org/plugins/maven-jar-plugin/usage.html - 提到了两种方式。简单的方法是创建一个 test-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>

如果您经常需要这样做,您很可能应该考虑将您的测试代码移动到单独的项目中。

于 2013-08-14T07:25:14.270 回答
0

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

于 2013-08-14T09:25:39.963 回答