我有一个maven项目的以下树结构:
Root/pom.xml
Root/moduleA/pom.xml
Root/moduleA/src/main/java/moduleA/MyClass.java
我希望通过exec-maven插件在Root pom.xml中使用类moduleA.MyClass。问题是:如果我使用
将ModuleA定义为pom xml的模块 Root/pom.xml
<modules>
<module>moduleA</module>
</modules>
我无法将其声明为Root与
的依赖关系 Root/pom.xml
<dependencies>
<dependency>
<groupId>Root</groupId>
<artifactId>moduleA</artifactId>
<version>1.0</version>
<scope>install</scope>
</dependency>
</dependencies>
因为它会导致像这样的循环依赖:
[INFO] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='Root:moduleA'}' and 'Vertex{label='Root:moduleA'}' introduces to cycle in the graph Root:moduleA --> Root:moduleA
问题是:如何在root pom上执行使用install
目标构建的moduleA 和能够使用exec-maven-plugin执行moduleA的类?
答案 0 :(得分:1)
我认为你的问题类似于鸡蛋问题。您的根POM是项目的聚合器,它会生成您要使用的工件。在制作工件之前,不能使用它们。如果您的根POM(也称为聚合器)中需要moduleA的类,则应在单独的项目中构建它。 但是,您的构建过程可能允许稍后执行MyClass(而不是在根POM中),您可以将此执行移至另一个模块并将依赖项设置为moduleA。
答案 1 :(得分:1)
您尚未发布完整的pom.xml,但我知道默认情况下安装目标不使用exec插件。您可以在插件声明中声明moduleA作为依赖项,我认为这将解决您的问题。
另一方面,如果您需要在安装目标中执行moduleA的一部分,那么如果没有第三个执行您的类的pom.xml,您将无法使用此设置。