我知道这个问题已经问过很多遍了,但是我读过的方法对我不起作用。我尝试了this,但仍然无法正常工作。
我有一个子项目(A),该子项目依赖于另一个子项目(B)。
两个子项目都包含在一个父目录中,在其各自的子目录中带有一个父pom.xml(将A和B声明为模块)。
使用maven-assembly-plugin编译和安装项目效果很好,但是当我尝试测试A时,它无法识别B的类。 我尝试过先安装它,然后进行测试,但仍然找不到类。我想念什么?
错误:
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
(default-testCompile) on project (A)
[ERROR] TestService.java:[8,17] cannot find symbol
[ERROR] symbol: class **Model** (the class I'm referencing in B)
[ERROR] location: class **TestService**
(test in A that tests the class in ../service/src/main/java/Service.java)
编辑:
/ project
-/服务(取决于型号;这也是我要测试的内容)
--- / src
---- / main
----- / java
------ / Service.java
---- /测试
----- / java
------ / TestService.java
-/模型(独立)
--- / src
---- / main
----- / java
------ / Model.java
-/ entry(取决于服务;整个项目的入口点)
--pom.xml(父pom)
三个项目中的每一个都在内部拥有自己的pom.xml。
/model/pom.xml不包含依赖项,也不包含插件
这里的父母: parent / pom.xml
...
<modules>
<module>entry</module>
<module>service</module>
<module>model</module>
</modules>
这里的条目:
/service/pom.xml
...
<parent>
<groupId>com.some.project</groupId>
<artifactId>project</artifactId>
<version>xx</version>
</parent>
<artifactId>entry</artifactId>
<packaging>jar</packaging>
<version>xx</version>
<name>entry</name>
<build>
...
<!--assembly plugin is declared here-->
</build>
<dependencies>
<dependency>
<groupId>com.some.project</groupId>
<artifactId>service</artifactId>
<version>xx</version>
</dependency>
</dependencies>
这里的服务:
/service/pom.xml
...
<parent>
<groupId>com.some.project</groupId>
<artifactId>project</artifactId>
<version>xx</version>
</parent>
<artifactId>service</artifactId>
<packaging>jar</packaging>
<version>xx</version>
<name>service</name>
<dependencies>
<dependency>
<groupId>com.some.project</groupId>
<artifactId>model</artifactId>
<version>xx</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
答案 0 :(得分:0)
Maven程序集插件通常在您要打包已编译的源代码时使用,因此此处与之无关。
如果您有两个项目,A和B,而B必须依赖A,则必须在B的pom.xml中定义一个依赖项(琐碎的事情):
<dependency>
<groupId>YOUR_GROUP_ID</groupId>
<artifactId>A</artifactId>
<version>YOUR_VERSION</version>
</dependency>
这将指示Maven在构建过程中设置类路径。
现在,根据A和B的工件类型,maven可以决定编译后的某些步骤,例如,如果B是WAR,则由于这种依赖性,A将包含在B的WEB-INF / lib文件夹中。
但是通常,如果A和B是罐子,那么maven不会仅将这些信息用于编译/测试,而不会用于包装。
现在,maven在不同阶段具有不同的类路径:在分词器中,一个用于编译,一个用于单元测试。
因此,如果要指定仅测试需要依赖项,而不应将其视为“编译”依赖项,则定义范围:
<dependency>
<groupId>YOUR_GROUP_ID</groupId>
<artifactId>A</artifactId>
<version>YOUR_VERSION</version>
<scope>test</scope>
</dependency>
如果您不指定任何范围,则maven会得出结论,无论是编译还是测试,甚至是打包,都需要依赖项,如我之前解释的那样。