2017-09-01 11 views
1

親と子のpomがあります。親はいくつかのプロファイルを定義します:子モジュールが親pomからプロファイルを継承していません

<profiles> 
    <profile> 
     <id>local</id> 
     <properties> 
      <build.profile.id>local</build.profile.id> 
     </properties> 
    </profile> 
</profiles> 

次に、子はこれらのプロファイルのプロパティをさらに定義します。私は一人っ子プロファイルmvn help:effective-pom -pl childを呼び出す場合

<profiles> 
    <profile> 
     <id>local</id> 
     <properties> 
      <name>serviceA</name> 
     </properties> 
    </profile> 
</profiles> 

親で定義されたプロパティが表示されません。それは子供たちだけを示しているので、親は何とか忘れられています。

私は親を継承し、子どもの中で修正/拡張することはできますか?

編集1:

残念ながら、親POMの継承は、いくつかの制限があります。可能な答え 私は、彼らが言うthis linkを発見しました。それらの1つは、プロファイルが継承されないということです。

多分それは可能ではありません。皆さんはどう思いますか?これらの年に物事は変わったのですか?

編集2:プロパティは、MVNのヘルプを実行することで何とか

継承されています。効果的な-POM -Plocal私はだから私は何らかの形が継承されているようだプロパティだけのために推測

... 
<properties> 
     <build.profile.id>local</build.profile.id> 
     <name>serviceA</name> 
</properties> 
<profiles> 
    <profile> 
     <id>local</id> 
     <properties> 
      <name>serviceA</name> 
     </properties> 
    </profile> 
</profiles> 

を取得します。

答えて

2

すでにわかっているように、同じ<id>の2つのプロファイルは、POM継承中にマージされません。今-Dlocalではなく-P localでビルドを実行する

<profiles> 
    <profile> 
     <id>local-parent</id> 
     <activation> 
      <property> 
       <name>local</name> 
      </property> 
     </activation> 
     <properties> 
      <build.profile.id>local</build.profile.id> 
     </properties> 
    </profile> 
</profiles> 

<profiles> 
    <profile> 
     <id>local-child</id> 
     <activation> 
      <property> 
       <name>local</name> 
      </property> 
     </activation> 
     <properties> 
      <name>serviceA</name> 
     </properties> 
    </profile> 
</profiles> 

:あなたは、回避策として何ができるか、しかし、異なる<id>と同じ<activation> conditionとのプロファイルを持つことです一緒に所望の効果を有する両方のプロファイルを活性化する。

+0

私はあなたのソリューションが好きです。私はまた、プロパティが親のpomから継承されていることにも気付きました。つまり、親のプロファイルの下でプロパティを定義すると、子を呼び出すときに、このプロパティも "グローバル"プロパティとして値として継承されます。ちょうど私のEdit2を見てください。 – jlanza

関連する問題