Domanda

Abbiamo una build multi modulo con moduli che utilizzano tecnologie diverse, come Java e Flex. È in qualche modo possibile attivare diversi profili in base al modulo attualmente compilato?

L'ho provato con un'attivazione come

<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

Ma non ha funzionato, sebbene l'uso di $ {basedir} sia documentato nella Documentazione Maven (questo è un bug in Maven). Esiste una possibilità diversa di avere attivazioni diverse in base al modulo corrente? O Maven consente solo di attivare un profilo per tutti i moduli o per niente?

È stato utile?

Soluzione

Per quelli come me che leggono questa domanda in cerca di risposte, questo caso d'uso ora funziona in Maven 3.

Si è verificato un errore nella funzione nelle prime versioni di 3 (consultare http: // jira .codehaus.org / browsing / MNG-2363 ) ma funziona correttamente con Maven 3.0.4.

Altri suggerimenti

Dopo alcune ulteriori ricerche sono finalmente giunto alla conclusione che ciò non è possibile per due motivi nell'attuale versione di Maven (2.1.0):

  • I profili Maven non vengono ereditati, quindi non è possibile definire un profilo in un POM principale e attivarlo in un POM secondario.
  • Non ho trovato la possibilità di attivare un profilo da un POM stesso. L'attivazione non funziona con $ {basedir} e la risposta di attivazione della proprietà solo alle impostazioni di sistema, che sono specificate a livello globale tramite l'opzione -D.

In 2.2.1, i profili sono ereditati ma il problema $ {basedir} è ancora presente. Sono nella stessa barca - Devo attivare un profilo basato sull'esistenza di un file in un determinato progetto. Le build di mio figlio funzionano individualmente bene (profilo ereditato attivato dall'esistenza di file locale), ma se eseguo la build dal genitore principale, falliscono perché il file non viene trovato.

Per quanto riguarda l'attivazione basata su file, puoi provare a rimuovere $ {basedir}. Lo usiamo così:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>

Non so se questo aiuta, ma ho risolto un problema simile con il seguente approccio:

  1. Ho creato e descritto il profilo nel POM principale, che ha activeByDefault = false . La sezione Gestione plug-in contiene quindi le configurazioni per diversi plug-in.
  2. I bambini possono riutilizzare questo profilo e impostare activeByDefault = true Questo rende attivo il profilo, ma nessuno dei plugin è ancora attivato.
  3. Ma per fortuna sono disponibili le configurazioni dei plugin descritte. Puoi riutilizzarli nei bambini definendoli nella sezione Plugin. Devi solo fornire il gruppo e l'artefactID e impostare inherited = true per ogni plugin che desideri riutilizzare nei bambini.

Spero che sia d'aiuto. Ci scusiamo per non aver incluso frammenti di codice, ma spero comunque che le soutions siano comprensibili.

Puoi impostare una proprietà in ciascun modulo per cui desideri utilizzare il profilo, quindi utilizzare " proprietà " attivazione nei tuoi profili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top