2010-11-18 4 views
4

値:他のプロパティに応じて、Mavenの中にプロパティを定義すると、私は次のような構造でMavenプロジェクトを作成したい

A、BおよびCは、フォルダ、およびBののpom.xmlとCさんのpom.xmlある
A 
|--pom.xml 
|--B 
    |--pom.xml 
|--C 
    |--pom.xml 

Aのpom.xmlの子です。

<properties> 
    <some.property>B</some.property> 
</properties> 

そしてCに:私はBさんのpom.xmlに以下のセクションが欲しい

<properties> 
    <some.property>C</some.property> 
</properties> 

をそして私はの値に基づいて、いくつかの他のプロパティの値を定義するために何かしてほしいですいくつかのプロパティ。だから、例えば、擬似コードでは、Aは、このような何かをするだろう:

if (some.property == 'B') then 
    some.other.property = 'some-value-based-on-b' 
else if (some.property == 'C') then 
    some.other.property = 'some-value-based-on-c' 
... 

私は(BとCを指しているモジュール部を含む)Aさんのpom.xmlを参照クリーンインストールMVNを実行したいので、私が理解する限り、私はこのためのプロファイルを使用することはできません(同じ原子炉で稼動するmaven2プロジェクトは同じアクティブなプロファイルを継承していますので、maven3を使うことができます。

どのようにすればいいですか?

おかげで、箱から出して

答えて

6

は、Mavenはこれを行うことができず、回避策は推奨されている(プロパティは、ライフサイクルの間に変化することになっていません)。

いくつかの回避策がありますが、私のお気に入りはgmaven pluginです。embed Groovy code in the pomです。

次のコードスニペットは、「DEF」プロパティかどうかに応じて、「バー」や「バズ」のいずれかにプロパティ「ABC」を設定しますが、「foo」を含んでいます。ところで

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
      <phase>validate</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <source><![CDATA[ 
pom.properties['abc']= 
    pom.properties['def'].contains('foo') ? 'bar' : 'baz'; 
       ]]></source> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

、ドキュメントがありますプラグインのバージョンが1.3になり、groupIdが変更されました。ここにはthe current versionがあります。

+0

しかし完全には機能しません。私が検証段階で定義していた変数の1つで定義されたスコープで依存関係をインポートできるように、その変数を使用したいと思ったとき、それは壊れました。このようなスクリプトの実行に時間がかかる前に、依存関係の解決が行われると思います。 – Rafael

+1

はい私はそう思う。依存関係をプログラム的に反復し、プレースホルダをプロパティ値^ shudder ^に置き換えなければならないということを達成するためです。最初に依存関係をプログラムで作成することができます。 –

関連する問題