2017-09-01 5 views
1

J'ai un parent et un enfant pom. Le parent définit certains profils:Le module enfant ne hérite pas du profil du parent pom

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

Ensuite, les enfants définissent plus de propriétés pour ces profils.

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

Si je ne convoquent que le profil de l'enfant mvn help:effective-pom -pl child les propriétés définies dans le parent ne montrent pas. Il montre seulement les enfants, donc le parent est en quelque sorte oublié.

Y a-t-il un moyen d'hériter du parent et de le modifier/étendre dans les enfants?

Edit 1: Réponse possible J'ai trouvé this link où ils disent:

Malheureusement, l'héritage de pom parent a des limites. L'un d'eux est que les profils ne sont pas hérités.

Alors peut-être que ce n'est pas possible. Qu'en pensez-vous? Les choses ont-elles changé pendant ces années?

Edit 2: Propriétés sont héritées d'une certaine manière

En exécutant l'aide mvn: efficace pom--Plocal je reçois

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

donc je suppose que les biens immobiliers seulement il semble que d'une certaine manière sont héritées.

Répondre

2

Comme vous l'avez déjà constaté, deux profils ayant le même <id> ne sont pas fusionnés pendant l'héritage POM. Ce que vous pouvez faire comme une solution de contournement, cependant, est d'avoir deux profils avec différents <id> mais avec le même <activation> condition:

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

et

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

L'exécution de la construction avec -Dlocal plutôt que -P local maintenant active les deux profils, qui ont conjointement l'effet désiré.

+0

J'aime votre solution. J'ai également remarqué que les propriétés sont héritées du parent pom, c'est-à-dire que si je définis une propriété sous un profil dans le parent, cette propriété est également héritée en valeur en tant que propriétés "globales" lors de l'appel des enfants. Juste voir mon Edit2. – jlanza