【问题标题】:Can't run maven tests that include many projects无法运行包含许多项目的 Maven 测试
【发布时间】:2015-09-03 13:55:13
【问题描述】:

我有许多 java 项目,每个项目都有其 maven 构建。他们都install 很好。

此外,我还有很多 JUnit 测试。这些测试可能依赖于其他项目,即来自Project A 的测试可能会从Project B 导入一个类。

我的项目结构不好(所有类都在src 目录中,而不是src/main/java)。所以当我运行mvn clean test 时,我得到No sources to compile。如果我通过将所有主要类移动到src/main/java 并将所有测试移动到src/test/java 来构建它,我会不断得到cannot find symbol(引用不同项目中类的导入)。

我尝试定义<testSourceDirectory>,使用了许多不同的pluginsprofiles,还尝试将我的java configuration 级别降低到1.7,但都无济于事。

我什至尝试定义一个具有许多模块的简单 POM 的 TestProject(仅使用 <modules>,或定义 <dependencies> 或两者兼有),但即使在这种情况下 - 我得到 No sources to compilecannot find symbol 或甚至package x.y does not exist (或者它编译但试图将它包含在其他项目中没有任何作用)。

我可以运行涉及其他项目中的类的测试吗?怎么样?

【问题讨论】:

  • 你能发布一个包含测试的项目的 pom 以及测试所依赖的项目的 pom 吗?这会让事情更清楚。
  • 你需要依赖测试类还是来自不同模块的源类?

标签: java eclipse maven junit


【解决方案1】:

也许您可以拥有并使用测试依赖项。我将解释我是如何实现这一目标的,希望它对您的项目有用。

我有一个包含许多子项目(名为 projectA、projectB 等)的项目,每个子项目都有自己的测试。也是一个名为“核心”的项目之一,带有包含公共类的 jar 包装。它们看起来像以下结构:

Main 
   |- core (jar)
   |- projectA (war)
   |- projectB (war)

不同项目的所有测试都使用了最终放置在“核心”项目测试用例中的通用代码。 这就是我们管理对 maven 3.1.1 的依赖的方式。

仅供参考 Main也是一个项目,有自己的pom.xml

主要(pom.xml):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.myproject</groupId>
  <artifactId>MyArtifact</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <properties>
  </properties>

  <repositories>
  </repositories>

  <modules>
    <module>core</module>
    <module>projectA</module>
    <module>projectB</module>
  </modules> 
   ...
</project>

在核心项目 pom.xml 上我们放了:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>core</artifactId>
<packaging>jar</packaging>
<parent>
  <groupId>com.mycompany.myproject</groupId>
  <artifactId>MyArtifact</artifactId>
  <version>1.0</version>
</parent>
<build>
  <pluginManagement>
    <plugins>
    <!-- Common test classes jar creation -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.5</version>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...

在其余项目 pom.xml 中,我们将依赖项放在这个 jar 中:

<dependencies>
    <!-- We put dependency with core.jar an test-core.jar -->
    <dependency>
      <groupId>com.mycompany.myproject</groupId>
      <artifactId>core</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>com.mycompany.myproject</groupId>
      <artifactId>core</artifactId>
      <version>1.0</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>

Eclipse 会警告此 maven 依赖项,但在使用 maven 从命令行运行 Test 时它可以正常工作。

希望这会有所帮助。

【讨论】:

  • 冉,你试过我的方法了吗?它符合您的需求吗?
  • 我明天试试,但请告诉我 - 根据您的结构,您似乎在 Main 下有项目 core、projctA 和 projectB。 Main 是一个项目,还是只是为了展示给我看?
  • 没错。 Main 也是一个有自己的 pom.cml 的项目。我会更新我的答案以包含它。
猜你喜欢
  • 2015-11-18
  • 2021-02-18
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2020-05-12
  • 2019-12-30
相关资源
最近更新 更多