我有很多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>
,使用了许多不同的plugins
和profiles
,并尝试将我的java configuration
级别降低到1.7,但都无济于事。
我甚至尝试定义一个TestProject,它有一个包含许多模块的简单POM(只有<modules>
或定义<dependencies>
或两者),但即便如此 - 我得到{{1} },No sources to compile
甚至cannot find symbol
(或者它编译但尝试将其包含在其他项目中什么都不做)。
我可以运行涉及其他项目的类的测试吗?怎么样?
答案 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时它会工作。
希望这有帮助。