57

最近、私は次の問題に遭遇しました:

プロジェクトの依存関係管理を設定するときに、依存関係のあるプラグインを使用する子pomがあり、依存関係管理で宣言された依存関係と同期させたいと考えています。

ルートpomで、依存関係管理で次のように宣言しました。

<dependencyManagement>
    <dependencies>
      ...
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>2.4.0</version>
        </dependency>
      ...
    <dependencies>
<dependencyManagement>

そして子pomには、gwt-userを必要とするプラグインがあります:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <version>2.4.0</version>
    <dependencies>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>2.4.0</version>
        </dependency>
            ...
        </dependencies>
  ...
</plugin>

ただし、gwt-maven-pluginで使用されている依存関係のバージョンを削除すると、コンパイルが失敗します。

それを達成する別の方法はありますか?

PS:私の質問に答えないMavenとMavenプラグインの依存関係バージョンの選択に関連する投稿があります

4

4 に答える 4

61

次のリンクによると、それは不可能のようです:

これが私が見つけた回避策であり、他の人が同じ問題を抱えている場合に備えて、みんなと共有したいと思いました。

ルートpomで、プロパティ、依存関係管理、プラグイン管理を定義しました。

<properties>
    <gwtVersion>2.4.0</gwtVersion>
    <gwtMavenPluginVersion>2.4.0</gwtMavenPluginVersion>
</properties>

<dependencyManagement>
   <dependencies>
    ...
    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-user</artifactId>
        <version>${gwtVersion}</version>
    </dependency>
    ...
   </dependencies>
</dependencyManagement>

<build>    
  <pluginManagement>
        <plugins>
            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>${gwtMavenPluginVersion}</version>
            <dependencies>
                <dependency>
                    <groupId>com.google.gwt</groupId>
                    <artifactId>gwt-user</artifactId>
                    <version>${gwtVersion}</version>
                </dependency>
                ...
            </dependencies>
            ...
        </plugins>
  ...
  </pluginManagement>
</build>

そして、私の子pomでは、プラグイン管理によって提供される関係を使用して(Maven2-pluginManagementと親子関係の問題を参照)、プラグインの依存関係を宣言するだけです。

<plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>gwt-maven-plugin</artifactId>
</plugin>

プロパティのバージョンを変更すると、すべての直接依存関係とプラグイン依存関係に自動的に影響します。

于 2012-06-29T07:57:15.457 に答える
6

<plugin>親POMが子が使用するプラグインのバージョンを制御するには、親POMの<pluginManagement>セクションでを宣言する必要があります。

com.google.gwt:gwt-userセクションでとして定義し<dependency>ました<dependencyManagement>

プラグインとして使用するのか、依存関係として使用するのかはわかりませんがgwt-user、継承を機能させるには、両方で同じエンティティとしてリストする必要があります。

于 2012-06-28T23:41:18.640 に答える
2

もう1つの可能性は、親POMのすべての依存関係をインポートすることです。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <version>2.4.0</version>
    <dependencies>
        <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>${project.artifactId}</artifactId>
             <version>${project.version}</version>
        </dependency>
            ...
        </dependencies>
  ...
</plugin> 

最も美しい解決策ではありませんが、機能しています:-)

于 2014-02-11T10:24:53.217 に答える
0

私の場合、hsqldbに依存するjettymavenプラグインを使用していました。groupIdをhsqldbとして指定したjettyプラグインを使用するために、sonatypeブックからいくつかのサンプル行をコピーしました(ここから行を取得したと思います)。私はhsqldbのバージョン2.3.2を使用しています。依存関係管理セクションの親pomと永続化モジュールでは、groupIdはorg.hsqldbです。その古いgroupIdの下にはバージョン2.3.2がないため、groupIdが一致しないことがエラーの原因でした。groupIdをhsqldbからorg.hsqldbに変更すると、すべてが機能し始めました。

于 2014-08-09T17:59:34.113 に答える