2

特定のプラグインを構成する親 pom があります

<pluginManagement>
   </plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
         ...
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
         ...
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
         ...
      </plugin>
   </plugins>
</pluginManagement>

そして、統合テストを表すpomsのツリーがあります

A-\
   a1
   a2
B-\
   b1
   b2
C-\
   D-\
      d1
      d2

私が行う各a、b、d製品で

<build>
   <plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
      </plugin>
   </plugins>
</build>

問題は、統合テスト プロセスに 4 番目のプラグインを追加する必要がある場合です。たとえば、カスタム プラグインでは、すべての統合モジュールを移動して手動で追加する必要があります。

<pluginManagement>すべての子がそれらを暗黙的に使用できるようにするには、削除するようにアドバイスしてください。 はい。ただし、単に「pom」である製品では、プラグインに何もさせたくありません。いくつかのリソースを作成し、jboss 構成ディレクトリを配置します。

何かあるのかしら

<pluginsBundle>
   <groupId>my.group</groupId>
   <artifactId>my-integration-test-bundle</artifactId>
   <plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
      </plugin>
   </plugins>
</pluginsBundle>

私がそれを同じように使用できるようにするには

   <plugin>
      <groupId>my.group</groupId>
      <artifactId>my-integration-test-bundle</artifactId>
      <runOnce>true</runOnce>
   </plugin>

のようなオプションを追加したい

<runOnce>true</runOnce>

アプリケーションサーバーを起動し、maven の起動ごとに 1 回だけターゲットをデプロイできるようにします。

4

2 に答える 2

2

私はあなたが必要としていることを正確に行うメカニズムを知りません。最善の策は、pluginManagementセクションではなく、buildセクションで定義されたプラグインを使用して親pomを定義することです。この場合、プラグイン構成は常に定義されます。親のプロファイルに構成を追加すると、これらのプラグインのアクティブ化をある程度制御できるようになります。

考慮すべき1つの改良点は、ファイルの有無によってプロファイルのアクティブ化を制御できることです。このようにして、親でプロファイルを定義できますが、マーカーファイルが親に存在するため、そのプロジェクトでプロファイルを非アクティブ化できます。子プロジェクトのソースにはマーカーファイルがないため、それらのプロジェクトのプロファイルがアクティブ化されます。大多数のプロジェクトで意味がある場合は、missing代わりにを使用して動作を逆にすることができます。exists

<profile>
  <id>build</id>
  <activation>
    <file>
      <missing>src/main/resources/build.marker</missing>
      <!-- or if you want to enable the profile when the file does exist:
      <exists>src/main/resources/build.marker</exists-->
    </file>
  </activation>
  <build>
    </plugins>
      <plugin>
        <artifactId>gmaven-plugin</artifactId>
        ...
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        ...
      </plugin>
      <plugin>
        <artifactId>cargo-maven2-plugin</artifactId>
        ...
      </plugin>
    </plugins>
  </build>
</profile>

または、フォークされたライフサイクルで必要なすべてのmojoを実行するライフサイクルを使用してカスタムプラグインを作成してみることもできます。私は最近、これを行う方法の詳細について別の質問に答えました。

別の方法は、Maven shared-ioを使用して記述子をpomに適用する別のプラグインを作成することです。その記述子は、pomにマージされる任意の構成を定義できます。別の答えは、これを行う方法を説明しています。

于 2009-09-17T10:14:19.933 に答える
0

AFAIK、他の場所で使用できるプラグインのバンドルを宣言する方法はありません...しかし、継承はあります。

<plugins>セクションの宣言を使用してpomを作成し<build>、統合テストプロジェクトでこのpomから継承するのはどうですか?これは実行可能のようです。

于 2009-09-17T10:11:10.157 に答える