无法运行包含许多项目的maven测试

时间:2015-09-03 13:55:14

标签: java eclipse maven junit

我有很多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,但都无济于事。

我甚至尝试定义一个TestProject,它有一个包含许多模块的简单POM(只有<modules>或定义<dependencies>或两者),但即便如此 - 我得到{{1} },No sources to compile甚至cannot find symbol(或者它编译但尝试将其包含在其他项目中什么都不做)。

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

1 个答案:

答案 0 :(得分:0)

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

我有一个包含许多子项目(名为projectA,projectB等)的项目,每个子项目都有自己的测试。还有一个名为'core'的项目,包含jar包装,包含公共类。它们看起来像以下结构:

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

对不同项目的所有测试都使用了最终放在“核心”项目测试条款上的通用代码。 这就是我们如何管理maven 3.1.1的依赖关系。

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

Main(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时它会工作。

希望这有帮助。