2009-05-22 16 views
50

Ho un Maven pom.xml con un plug-in che voglio essere in grado di controllare sulla riga di comando. Tutto funziona altrimenti andava bene, tranne che anche dopo aver cercato in rete un po 'non riesco a capire come impostare un valore predefinito per la mia proprietà di controllo:Impostazione dei valori predefiniti per le proprietà personalizzate di Maven 2

<plugin> 
    ... 
    <configuration> 
     <param>${myProperty}</param> 
    </configuration> 
    ... 
</plugin> 

Quindi, se corro Maven con

mvn -DmyProperty=something ... 

va tutto bene, ma mi piacerebbe avere un valore specifico assegnato a myProperty anche senza lo switch -DmyProperty=.... Come si può fare?

risposta

43

Vecchia domanda ma penso che la risposta più semplice non sia lì. È possibile avere il valore predefinito della proprietà definito in <build>/<properties> o in un profilo come mostrato di seguito. Quando si fornisce il valore della proprietà sulla riga di comando con -DmyProperty=anotherValue, questo sostituirà la definizione da POM. Spero di essere stato in grado di spiegare ..

<profile> 
    ... 
    <properties> 
     <myProperty>defaultValue</myProperty>    
    </properties> 
    ... 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    ... 
</profile> 
1

Questo potrebbe funzionare per voi:

<profiles> 
    <profile> 
    <id>default</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
    <plugin> 
     <configuration> 
     <param>Foo</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
    <profile> 
    <id>notdefault</id> 
    ... 
    <build> 
     <plugin> 
     <configuration> 
      <param>${myProperty}</param> 
     </configuration> 
    </plugin> 
    </build> 
    ... 
    </profile> 
</profiles> 

In questo modo,

mvn clean userà "foo" come param predefinito. Nei casi in cui è necessario sostituire, utilizzare mvn -P notdefault -DmyProperty=something

+1

Non potrebbe questa essere semplificato un po 'utilizzando un blocco di attivazione per attivare NODEFAULT a meno che nessuna proprietà -D è stata approvata a tutti. – djangofan

+0

@djangofan hai ragione. Stavo cercando di dare una risposta alla mia risposta in sostituzione della domanda. – sal

25

si potrebbe usare qualcosa come di seguito:

<profile> 
    <id>default</id> 
    <properties> 
     <env>default</env> 
     <myProperty>someValue</myProperty>    
    </properties> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 
+0

Esatto, grazie, grazie! –

+0

Grande. Nessun problema. –

30

Taylor L's approccio funziona bene, ma non è necessario il profilo supplementare. Puoi semplicemente dichiarare valori di proprietà nel file POM.

<project> 
    ... 
    <properties> 
    <!-- Sets the location that Apache Cargo will use to install containers when they are downloaded. 
     Executions of the plug-in should append the container name and version to this path. 
     E.g. apache-tomcat-5.5.20 --> 
    <cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir> 
    </properties> 
</project> 

È inoltre possibile impostare le proprietà nel file settings.xml utente nel caso in cui si desidera che ogni utente sia in grado di fissare le proprie impostazioni predefinite. Utilizziamo questo approccio per nascondere le credenziali utilizzate dal server CI per alcuni plug-in da sviluppatori regolari.

2

soluzione akostadinov grandi opere per uso comune ... Ma se la proprietà desiderata deve essere utilizzato per componente del reattore durante la fase di risoluzione delle dipendenze (molto presto nella lavorazione gerarchia mvn pom. ..) si dovrebbe usare il profilo "nessuna attivazione" meccanismo di test per garantire che il valore fornito dalla riga di comando opzionale abbia sempre la priorità sul valore fornito all'interno di pom.xml. E questa è la tua gerarchia.

Per farlo, aggiungere questo tipo di profilo nel vostro pom.xml genitore:

<profiles> 
    <profile> 
     <id>my.property</id> 
     <activation> 
     <property> 
      <name>!my.property</name> 
     </property> 
     </activation> 
     <properties> 
     <my.property>${an.other.property} or a_static_value</my.property>    
     </properties> 
    </profile> 
    </profiles> 
+1

Puoi mostrare un esempio di pom in cui il normale '-D' non funziona? – akostadinov

Problemi correlati