取决于maven中的模块

时间:2012-05-10 21:24:53

标签: java maven pom.xml

我有一个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的类?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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