2010-01-06 20 views
34

W pom.xml Mam ustawiony o profilach tak:Maven - Czy mogę podać identyfikator profilu w definicji profilu?

 
<profile> 
<id>profileId1</id> 
    <build> 
     <filters> 
      <filter>src/main/filters/profileId1.properties</filter> 
     </filters> 
// rest of the profile 
</profile> 
<profile> 
<id>profileId2</id> 
    <build> 
     <filters> 
      <filter>src/main/filters/profileId2.properties</filter> 
     </filters> 
// rest of the profile 
</profile> 

Czy jest jakiś sposób mogę wyodrębnić ten kawałek ze wszystkich profili, dzięki czemu nie ma potrzeby powtarzania tego dla każdego profilu (i ewentualnie błędnie to)?

Odpowiedz

2

Według PLXUTILS-37, powinno być możliwe uzyskanie dostępu do właściwości na liście lub mapie za pomocą "Właściwości odbicia" (więcej informacji na ten temat można znaleźć w MavenPropertiesGuide).

Więc po prostu spróbować ${project.profiles[0].id}, ${project.profiles[1].id} itp

Jeśli to nie zadziała (nie sprawdzić, czy nie), użyję aktywację profilu na podstawie właściwości systemu, jak to opisano w Introduction to build profiles i użyj tej właściwości w filtrze. Coś takiego:

<profile> 
    <id>profile-profileId1</id> 
    <activation> 
    <property> 
     <name>profile</name> 
     <value>profileId1</value> 
    </property> 
    </activation> 
    <build> 
    <filters> 
     <filter>src/main/filters/${profile}.properties</filter> 
    </filters> 
    // rest of the profile 
</profile> 

Aby uaktywnić profil, należy wpisać to w wierszu poleceń:

mvn groupId:artifactId:goal -Dprofile=profileId1 
29

Z Maven 2.2.1 i później, byłem w stanie uzyskać identyfikator pierwszy aktywny profil przy użyciu:

${project.activeProfiles[0].id} 

Oczywiście to się nie powiedzie, jeśli nie ma co najmniej jednego aktywnego profilu.

Używanie

${project.profiles[0].id} 

jak sugeruje Pascal zrobił nie pracę dla mnie.

Podpowiedź: Badając to, że naprawdę zaczął kochać mvn help:evaluate

+2

Korzystanie '$ {project.activeProfiles [0] .id}' działało idealnie dla mnie. Możesz upewnić się, że przynajmniej jeden profil będzie aktywny z ' true' w bloku aktywacyjnym jednego profilu. – SimonB

+1

To samo, $ {project.activeProfiles [0] .id} działało, maven 3.2 – chrismarx

+0

Z jakiegoś powodu nie wyodrębni macierzystej właściwości pom; więc jeśli na przykład aktywujesz 2 profile, z których jeden pochodzi od rodzica, zostanie pobrana tylko bieżąca właściwość projektu. – ftkg

11

Jako alternatywę dla ${project.activeProfiles[0].id} (co nie wydaje się działać na starsze wersje Maven), wystarczy zdefiniować właściwość:

<profile> 
     <id>dev</id> 
     <properties> 
      <profile-id>dev</profile-id> 
     </properties> 
    </profile> 

Następnie użyj ${profile-id}.

Uwaga: tylko upewnić się, jeden jest zawsze aktywna domyślnie

+3

Dlaczego widzę węża gryzącego jego ogon? –

Powiązane problemy