2012-03-26 9 views
0

Ich habe eine benutzerdefinierte Enforcer-Regel geschrieben und getestet, um verteilungsspezifische Builds auf verschiedenen Linux-Distributionen zu erstellen. Es testet gut mit dem mvn enforcer:enforce Befehl mit dem bereitgestellten pom.xml Build-Snippet.Maven3 Profil mit benutzerdefinierten Enforcer-Regel, ist es möglich?

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.0-beta-1</version> 
    <dependencies> 
     <dependency> 
     <groupId>org.example</groupId> 
     <artifactId>maven-enforcer-rule-redhat6x</artifactId> 
     <version>1.0</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <rules> 
     <redhat6x implementation="org.example.enforcer.Redhat6x"> 
      <compatible>true</compatible> 
     </redhat6x> 
     </rules> 
    </configuration> 
    <executions> 
     <execution> 
     <id>enforce</id> 
     </execution> 
    </executions> 
    <goals> 
     <goal>enforce</goal> 
    </goals> 
    </plugin> 
</plugins> 

Nach meinem Gehirn Abstich und eine Menge experimenteller Tests zu tun, kann scheinen ich nicht zu finden, wie sich diese benutzerdefinierten Enforcer Regel als Profil Aktivierung Wähler verwenden.

<profiles> 
    <profile> 
     <id>RedHat6x</id> 
     <activation> 
     <!-- Something goes here, but what? This doesn't work --> 
      <redhat6x implementation="com.cisco.tesdw.enforcer.Redhat6x"> 
       <compatible>true</compatible> 
      </redhat6x> 
     </activation> 
    </profile> 
    </profiles> 

Es gibt einige Hinweise, dass Profilaktivierung verwendet maven-enforcer-rules wie in der Introduction to Profiles Seite unter dem Abschnitt detailliert im Abschnitt „Wie kann ich die Profile sind in der Tat während eines Build sagen“. Jede Profilaktivierung, die mehrere Zeichenfolgenwerte (Betriebssystemname usw.) hat, wird nämlich auf die entsprechende Maven-Enforcer-Regel verwiesen. Es scheint jedoch, dass die direkte Aufnahme eines benutzerdefinierten Profilaktivators in pom.xml und adding such would likely require a pom version update nicht offensichtlich ist.

Maven3 ist auch erweiterbar in einer Weise, die sehr flexibel ist, ist es möglich, Aufnahme meiner Enforcer-Regel durch die Maven-Erweiterungen Mechanismus zu haken? Es gibt eine Dokumentation darüber, wie benutzerdefinierte Lebenszyklusteilnehmer einbezogen werden können. Aber ich befürchte, dass die Profilaktivierung bereits zu dem Zeitpunkt, zu dem der Build gestartet wird, stattgefunden hat. Die Dokumentation ist spärlich, aber das Javadoc zeigt an, dass AbstractMavenLifecycleParticipant.afterProjectsRead(MavenSession session) "nach allen MavenProject Instanzen erstellt worden ist" aufgerufen wird. Das lässt Zweifel in mir aufkommen, ob es vor oder nach der Profilaktivierung heißt. Ich vermute nach, oder wie würde man eine richtig konfigurierte MavenProject bekommen?

Kann mir jemand sagen, ob die Anpassung der Profilaktivierung sogar aus der Ferne möglich ist?

Antwort

1

Sie müssen nur Plugin-Konfiguration unter Profil verschieben:

<profiles> 
    <profile> 
     <id>RedHat6x</id> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.0-beta-1</version> 
      <dependencies> 
      <dependency> 
       <groupId>org.example</groupId> 
       <artifactId>maven-enforcer-rule-redhat6x</artifactId> 
       <version>1.0</version> 
      </dependency> 
      </dependencies> 
      <configuration> 
      <rules> 
       <redhat6x implementation="org.example.enforcer.Redhat6x"> 
       <compatible>true</compatible> 
       </redhat6x> 
      </rules> 
      </configuration> 
      <executions> 
      <execution> 
       <id>redhat-enforce</id> 
      </execution> 
      </executions> 
      <goals> 
      <goal>enforce</goal> 
      </goals> 
     </plugin> 
     </plugins> 
    </profile> 
</profiles> 
+0

Ich bin mir nicht sicher, ob Sie verstehen. Wenn ich das tue, wird es nicht die Enforcer-Regel konfigurieren, nachdem ich das Profil aktiviert habe? Ich möchte, dass die Regel die Aktivierungsbestimmungsregel _be_ ist. Trotzdem werde ich es testen. –

+0

Ok, um Plugins zur Arbeit zu bringen, musste ich Build Tags um sie herum werfen. Genau wie ich vermutet habe, aktiviert es das Profil nicht, 'mvn help: active-profiles' gibt" Es gibt keine aktiven Profile "zurück. –

+0

Ich sehe ... Leider ist die einzige Möglichkeit, ein bestimmtes Profil zu aktivieren, auf der System- oder Umgebungseigenschaft basiert. Diese Eigenschaften können von keinem der Plugins gesetzt werden. Sie können sich also nur auf eines verlassen, das Sie mit dem -D-Flag in der mvn-Befehlszeile oder in einer der Umgebungsvariablen auf Ihrem System festgelegt haben. Siehe http://www.sonatype.com/books/mvnref-book/reference/profiles-sect-activation.html –

Verwandte Themen