2013-12-18 4 views
7

Konfiguration:
- Maven: 3.0.5
- Java: 1.6.0_45maven -> Profil -> Aktivierung - alle Bedingungen sind erforderlich oder nur eine?

Beschreibung:

Lassen Sie uns sagen, dass wir Profilkonfiguration wie unten haben:

<profiles> 
    <profile> 
     <id>profile-1</id> 
     <activation> 
      <jdk>1.6</jdk> 
      <property> 
       <name>name</name> 
       <value>Hubert</value> 
      </property> 
     </activation> 
    </profile> 
    <profile> 
     <id>profile-2</id> 
     <activation> 
      <jdk>1.6</jdk> 
      <property> 
       <name>name</name> 
       <value>Wiktoria</value> 
      </property> 
     </activation> 
    </profile> 
</profiles> 

Wir haben zwei p rofiles: profile-1 und Profil-2.

Profil Profil-1 sollte aktiv sein, wenn zwei Voraussetzungen erfüllt sind:
- jdk ist Version 1.6
- Eigenschaft Name hat Wert Hubert

Frage:

Lassen Sie uns diese Konfiguration überprüfen:

mvn -Dname = Hubert Hilfe: aktiv-Profile

Als Ergebnis erhalte ich, dass es zwei aktive Profile: Profil-1 und Profil-2. Hmm
...
Profil Profil-2 sollte nicht aktiv sein, da Eigenschaft Name Wert hat sich von erwarteten Wiktoria.

Könnte mir jemand erklären, warum diese Arbeit wie das? Ist es ein normales Verhalten?
Danke.

Antwort

6

Das Problem hierbei ist, dass die Aktivierungsliste mit Triggerbedingungen mit OR verbunden ist. Sie haben ein Ticket für provide multiple activation triggers, aber es ist noch offen. Das bedeutet, dass es Ihrer SDK-Regel entspricht, die wahr und daher aktiv ist.

<profile> 
    <id>profile-1</id> 
    <activation> <!-- true || true = true --> 
     <jdk>1.6</jdk> <!-- true --> 
     <property> <!-- true --> 
      <name>name</name> 
      <value>Hubert</value> 
     </property> 
    </activation> 
</profile> 
<profile> 
    <id>profile-2</id> 
    <activation> <!-- true || false = true --> 
     <jdk>1.6</jdk> <!-- true --> 
     <property> <!-- false --> 
      <name>name</name> 
      <value>Wiktoria</value> 
     </property> 
    </activation> 
</profile> 
+1

Danke Chasmo für Ihre Antwort. Du hast recht. Prost. – Hubert

+0

Dieses Problem (MNG-3328) ist jetzt hier: https://issues.apache.org/jira/browse/MNG-3328 – seanf

2

HINWEIS: Dies ist nur ein suplement zu Chasmo die richtige Antwort.

Es gibt ein Buch von Sonatype beschreibt Maven. Im Bereich Sonatype book (section 5.3.1) finden wir:

Ein Profil wird aktiviert, wenn alle Aktivierungskriterien erfüllt sind.

Dies ist nicht wahr. Die Wahrheit ist, dass eine Bedingung ausreicht, um das Profil zu aktivieren, was natürlich der ODER-Logikbedingung entspricht.Dieses Verhalten wird in Maven docs beschrieben:

Aktivierung tritt auf, wenn eine oder mehrere der genannten Kriterien erfüllt sind. Wenn das erste positive Ergebnis auftritt, stoppt die Verarbeitung und das Profil wird als aktiv markiert.

für mich Dies ist weder intiutive noch sehr nützlich. Aber so arbeitet Maven zum Zeitpunkt des Schreibens.

Es gibt ein Ticket MNG-4565 für UND-Verbindung. Dies ist als Bug markiert, aber laut Maven doc ist es nicht, also ist dieses Ticket seit fast 4 Jahren geöffnet. Der nützlichste Teil ist der letzte Kommentar zu diesem Ticket geschrieben von Ronny Pscheidl. Sein Kommentar zeigt auf diese Quelle: and-activation-profile-selector. Dies ändert die Standardmaven-ODER-Bedingung in die UND-Bedingung. Geprüft. Funktioniert. Aber natürlich, wenn Sie sich entscheiden, dieses zu verwenden, haben Sie eine Sache, an die Sie sich erinnern müssen.

+1

Danke für den Hinweis. –

+2

MNG-4565 wurde in 3.2.2 behoben. – lpandzic

+0

MNG-4565 ist jetzt hier: https://issues.apache.org/jira/browse/MNG-4565 – seanf