2009-05-22 9 views
50

Mam pom.xml Mavena z wtyczką, którą chcę kontrolować w linii poleceń. Wszystko działa w przeciwnym razie w porządku, chyba nawet po przeszukiwaniu netto, podczas gdy nie mogę dowiedzieć się, jak ustawić wartość domyślną dla mojego mienia sterowania:Ustawianie domyślnych wartości dla niestandardowych właściwości Maven 2

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

Więc jeśli biegnę Maven z

mvn -DmyProperty=something ... 

wszystko jest w porządku, ale chciałbym mieć określoną wartość przypisaną do myProperty również bez przełącznika -DmyProperty=.... Jak to zrobić?

Odpowiedz

43

Stare pytanie, ale myślę, że najprostsza odpowiedź nie istnieje. Możesz mieć domyślną wartość właściwości zdefiniowaną w <build>/<properties> lub w profilu pokazanym poniżej. Jeśli podasz wartość właściwości w wierszu poleceń przy pomocy -DmyProperty=anotherValue, to zastąpi ona definicję z POM. Mam nadzieję, że udało mi się wyjaśnić ..

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

To może pracować dla Ciebie:

<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> 

ten sposób

mvn clean użyje "foo" jako domyślnego param. W przypadkach, gdy trzeba zastąpić, użyj mvn -P notdefault -DmyProperty=something

+1

nie może to być trochę uproszczone za pomocą bloku aktywacyjny, aby aktywować nodefault chyba nie majątek został przekazany na -D wszystko. – djangofan

+0

@djangofan masz rację. Próbowałem uczynić moją odpowiedź kroplą w zamian za pytanie. – sal

25

Można użyć coś jak poniżej:

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

Dobrze, dzięki, dziękuję! –

+0

Świetnie. Nie ma problemu. –

30

Taylor L's podejście działa dobrze, ale nie trzeba dodatkowego profilu. Możesz po prostu zadeklarować wartości właściwości w pliku 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> 

Można również ustawić właściwości w pliku settings.xml użytkownika w przypadku, gdy ma każdy użytkownik będzie mógł ustawić własne wartości domyślne. Używamy tego podejścia do ukrywania referencji używanych przez serwer CI w przypadku niektórych wtyczek od zwykłych programistów.

2

rozwiązanie akostadinov działa świetnie na potocznym ... Ale jeśli pożądana właściwość powinna być używana przez komponent reaktora w fazie rozwiązywania zależności (bardzo wcześnie mvn pom przetwarzania hierarchii. ..) powinieneś użyć profilu "" bez aktywacji "mechanizmu testowego, aby zapewnić, że opcjonalna wartość podana w wierszu poleceń ma zawsze priorytet względem wartości podanej w pom.xml. I bez względu na to, jak głęboka jest twoja hierarchia pom.

Aby to zrobić, należy dodać tego rodzaju profilu w swojej macierzystej pom.xml:

<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

Czy możesz pokazać przykładowe pom, w którym normalne '-D' nie działa? – akostadinov