2

我有以下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

问题是:如何保持install在 Root pom 上执行目标构建的 moduleA能够使用 exec-maven-plugin 执行 moduleA 的类?

4

2 回答 2

1

我认为您的问题类似于先有鸡还是先有蛋的问题。您的根 POM 是您项目的聚合器,它生成您想要使用的工件。在制作工件之前,它们不能被使用。如果你的根 POM(又名聚合器)中需要你的 moduleA 的类,你应该在一个单独的项目中构建它。但是可能您的构建过程允许稍后执行 MyClass(而不是在根 POM 中),您可以将此执行移动到另一个模块并将依赖项设置为 moduleA。

于 2012-05-11T07:03:01.033 回答
1

您尚未发布完整的 pom.xml,但我知道默认情况下安装目标不使用 exec 插件。您可以在插件声明中将 moduleA 声明为依赖项,我认为这可以解决您的问题。

另一方面,如果您需要在安装目标中执行模块 A 的一部分,那么如果没有第三个 pom.xml,您将无法使用此设置,它只会执行您的类。

于 2012-05-11T09:56:56.410 回答