2

私はmavenプロジェクトの次のツリー構造を持っています:

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

そして、exec-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

問題はinstall、ルート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 プラグインが install ゴールで使用されていないことはわかっています。プラグイン宣言内で moduleA を依存関係として宣言できます。これにより、問題が解決すると思います。

一方、インストール ゴールで moduleA の一部を実行する必要がある場合は、クラスを実行するだけの 3 番目の pom.xml なしでは、このセットアップを使用できません。

于 2012-05-11T09:56:56.410 に答える