2012-05-10 54 views
2

我有Maven項目的下面的樹結構:依靠模塊中的行家

Root/pom.xml 
Root/moduleA/pom.xml 
Root/moduleA/src/main/java/moduleA/MyClass.java 

,我想通過高管,Maven插件使用根pom.xml的一類moduleA.MyClass。問題是:如果我定義ModuleA爲POM XML的模塊

Root/pom.xml

<modules> 
    <module>moduleA</module> 
</modules> 

我不能

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 

的問題是:如何保持moduleA與根POM 有EXEC-Maven的插件執行moduleA類能力執行install目標建?

回答

1

我認爲你的問題類似於雞與蛋問題。您的根POM是您的項目的聚合器,它會生成您要使用的工件。在產生文物之前,它們不能被使用。如果您的根POM(又名聚合器)中需要您的moduleA的類,則應該將其構建在單獨的項目中。 但是,可能你的構建過程允許稍後執行MyClass(而不是在根POM中),那麼可以將此執行移至另一個模塊並將依賴項設置爲moduleA。

1

您尚未發佈完整的pom.xml,但我知道默認情況下,exec插件未被安裝目標使用。您可以在插件聲明中將moduleA聲明爲依賴項,我認爲這可以解決您的問題。另一方面,如果你需要在你的安裝目標中執行moduleA的一部分,那麼你將無法使用這個設置,如果沒有第三個pom.xml,它只會執行你的類。