2016-02-11 3 views
5

問題Mavenの私は、次のいずれかに類似した構造を有してMavenプロジェクトを持っている子供モジュールプロファイル

子供B1およびB2は、特定のプロファイルを使用して構築する必要がありますいくつかの追加ビルドが含まれています。結果として、プロファイルはモジュールBに指定されています。

を論理的モジュールは、いくつかの依存関係等(aggreagtion +継承)Bのモジュールとさらに継承する属します。
はまだ使用する可能性があります


質問

  • (B =フロントエンド、B1 = UI、B2 =テーマ、B3 =何か他のもののようなものを想像して) 親からの完全なビルド pomそして正しいプロファイル の子供のプロフィールのみを有効にしますか? (私のお気に入りの解決策になります)
  • アドバンスドリアクター オプション(-plなど)を使用して別々のビルドが必要ですか?
  • このようなシナリオでは、まったく別の方法がありますか?

編集

編集質問がduplicateと同定されたとおり 問題は応じて質問に言及したソリューションが動作しないということです。

私はプロパティを使用して、サブプロファイルをアクティブにすると、それは、モジュールB(親)のために、そしてALL子供たちのためにも有効になります。

子供のためにのみアクティブにしたいB1B2です。

+1

[親プロファイルからの子プロファイルの有効化]の可能な複製(http://stackoverflow.com/questions/35304770/activating-a-child-親プロフィールからのプロフィール) –

+0

@Aと同意します。DiMatteo。リンクされた質問がこれに答えます。 – Tunaki

+0

私の編集をご覧ください。 – JDC

答えて

8

親プロジェクト(pom)で集中的に定義されているプロファイルを親モジュールに適用しないで、サブモジュール(一部のみ)に適用するプロファイルを作成する場合は、ここで提案されたアプローチです:

は、親のポンポンでサンプル1を、プロファイルを定義します。私たちがやっていること

<profiles> 
    <profile> 
     <id>sample-profile</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <version>1.5</version> 
        <executions> 
         <execution> 
          <id>print-hello</id> 
          <phase>${phase.prop}</phase> 
          <goals> 
           <goal>run</goal> 
          </goals> 
          <configuration> 
           <target> 
            <echo message="hello there!" /> 
           </target> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

注:

  • プラグインphase要素は、パラですプラグインのビルド段階へのバインディングもパラメータ化されます
  • このプラグインの実行をフェーズに接続するプロパティを決定することができます
  • このプラグインの実行をフェーズなしまたは空相)

ので、同じ親のポンポンで、のプロパティを定義してみましょう:このよう

<properties> 
    <phase.prop>none</phase.prop> 
</properties> 

、親ポンポン上で実行されているビルドはnone(無相にプラグインの実行を添付しますキーウォーではないdまたは既知の値、現存していないフェーズで使用された事実上のスタンダードのみを空にしたり、好きな値を入れても同じ効果があります。宣言されたすべてのモジュールでは、デフォルトでスキップされます。プロファイルはすべてのモジュールで引き続き有効ですが、デフォルトではプラグインを実行しないため、無害です。

その後、あなたはプラグインの実行は、あなたが唯一の懸念プロパティと必要な位相再定義することができ、アクティブにしたいモジュール内:

<properties> 
    <phase.prop>package</phase.prop> 
</properties> 
メインのビルドからプロファイルを活性化

(親を)

mvn clean install -Psample-profile 

親は、すべてのモジュールに適用されますが、phase.prop値は達人、意味のある値を有する場合に有効なプロファイルの実行にのみ発生します。

異なるプラグインの実行に異なるフェーズが必要な場合は、複数のプロパティを定義して同じパターンを適用できます。

Mavenですでに実行されているプラ​​グイン(パッケージングとデフォルトビルドの一部)のグローバルプラグイン設定がない場合は、default execution idをオーバーライドしてその実行を再定義することができます。

我々はskipの構成要素を使用して同じことを行っている可能性注意、しかし:

  • は、すべてのプラグインがphase要素を使用してskip構成エントリ
  • を提供していないがどのような構成に関連していないとすることができ同じフェーズに関連付けられた実行のために再利用
+0

私はあなたのソリューションを実装しましたが、うまくいくようです。問題は、私のプロファイルのプラグインの実行が異なるフェーズで起こることだけです。今私は子供のポンの内部に4つのプロパティを設定する必要があります。私は検証フェーズでmaven antrunプラグインを使用してこれを実行しようとしました(子はプロパティをtrueに設定し、antrunは他のすべてのプロパティを設定します)。これは動作しないようです。とにかくありがとう、一度に複数のプロパティを設定する解決策が見つからなければ、これはまだ私たちを助けます。 – JDC

+0

@ JDC多分、[Properties Maven Plugin](http://www.mojohaus.org/properties-maven-plugin/)は複数のプロパティを設定するのに役立ちます。 –

関連する問題