Diverse dipendenze per diversi profili di build


115

È possibile avere un diverso insieme di dipendenze in un file pom.xml di Maven per diversi profili?

per esempio

mvn -P debug
mvn -P release

Vorrei prendere un diverso file jar delle dipendenze in un profilo che ha gli stessi nomi di classe e diverse implementazioni delle stesse interfacce.


Può essere utilizzato quando si prendono di mira diversi server web. Ad esempio, quando si compila per un server JavaEE 5, che offre librerie come JAXB, che non dovresti includere nel tuo file war, rispetto alla compilazione per un server JavaEE 1.4, dove dovresti includere il jar JAXB.
Leonel

Risposte:


174

Per citare la documentazione di Maven su questo :

Un elemento del profilo contiene sia un'attivazione opzionale (un trigger di profilo) che l'insieme di modifiche da apportare al POM se tale profilo è stato attivato. Ad esempio, un progetto creato per un ambiente di test può puntare a un database diverso da quello della distribuzione finale. Oppure le dipendenze possono essere estratte da diversi repository in base alla versione JDK utilizzata .

(L'enfasi è mia)

Metti semplicemente la dipendenza per il releaseprofilo all'interno della dichiarazione del profilo stesso e fai lo stesso per debug.

<Profili>
    <Profilo>
        <Id> debug </ id>
        ...
        <Dipendenze>
            <Dependency> ... </ dependency>
        </ Dipendenze>
        ...
    </ Profile>
    <Profilo>
        <Id> stampa </ id>
        ...
        <Dipendenze>
            <Dependency> ... </ dependency>
        </ Dipendenze>
        ...
    </ Profile>
</ Profili>

2
Questo metodo farà sì che il codice non venga risolto in modalità di modifica. Se il debug è attivo, mancherà il jar della dipendenza del rilascio e il codice sarà un errore. Come risolverlo?
brucenan

6
è possibile impostare l'ambito della dipendenza specifica del rilascio come "fornito" nella gerarchia delle dipendenze e reimpostare l'ambito su "compilazione" nella sezione del profilo del rilascio. In modo che la dipendenza sia disponibile per la compilazione ma non nella guerra finale per il profilo "debug".
lunedì

@uday Se mettessi una risposta che mostri quell'approccio mi piacerebbe
votarlo

I profili IMHO sono inutili, almeno per le dipendenze: gli IDE danno errori, le dipendenze smettono di risolversi, le applicazioni alla fine non funzionano. Mi aspettavo di più.
Ares

6

Il tuo groupId, artifactId dovrebbe essere tokenizzato nei tuoi profili come proprietà e puoi spostare le tue dipendenze nella sezione generica.


2
Questo sarebbe il caso solo se hai 1 dipendenza. Se il numero di dipendenze differisce tra debug e rilascio, solo la tokenizzazione non funzionerà. Per questo motivo, consiglierei di non tokenizzare e definire esplicitamente i deps nella sezione del profilo.
Marcel Overdijk

L'altra risposta non ha funzionato per me, poiché le dipendenze del profilo predefinito erano ancora incluse insieme ad altre dipendenze del profilo specifiche. La tua risposta ha funzionato bene.
Vlad Mihalcea

@Vlad Hai rimosso la dipendenza dal corpo principale del POM? Altrimenti lo avrai due volte. (Vedere stackoverflow.com/q/24855678/6944068 su come assicurarsi che un profilo sia sempre attivo.)
toolforger
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.