2013-01-23 5 views
14

Ich suche nach einer Möglichkeit, die Ausführung eines Plugins zu deaktivieren, wenn es mit einem bestimmten Profil ausgeführt wird. Das ist das Gegenteil von running a plugin if a profile is selected.Deaktivieren Sie Maven-Plugins, wenn Sie ein bestimmtes Profil verwenden

Mein Anwendungsfall: Mein Maven Build hat eine ganze Menge Plugins, aber wenn ich auf meinem Dev-Rechner laufe, möchte ich einige davon überspringen. Anstatt diese Plugins lokal zu kommentieren, möchte ich den Build einfach mit einem "dev" -Profil ausführen können. Die Plugins würden weiterhin auf meinem kontinuierlichen Build laufen.

Ideen?

+2

In allen Plugins gibt es eine Feature-Anforderung für ein Element. http://jira.codehaus.org/browse/MNG-3102 – ben75

+0

Das würde bedeuten, dass alle Plugins diese Features unterstützen müssen. Ich dachte eher an ' dev ' – jrharshath

+0

Können Sie ein bisschen mehr ausarbeiten, was genau Sie erreichen möchten? Irgendeine Art von Verpackung? Tests usw.? oder was? Kann es sein, dass du Auszüge deiner Pom-Datei (n) geben kannst? – khmarbaise

Antwort

13
  • Definieren Sie Ihre pom damit hat, ist nur die Plugins, die Sie in den Entwicklermodus benötigen
  • definieren dev Profil
  • ein Produktionsprofil definieren, die alle Plug-ins enthält Sie wollen/müssen
  • Produktionsprofil definieren als Standard

Beispiel pom:

<profiles> 
    <profile> 
    <id>production</id> 

    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 

    <build> 
     <plugins> 
     <!-- 
     <plugin> 
      ... 
     </plugin> 
     --> 
     </plugins> 
    </build> 
    </profile> 

    <profile> 
     <id>dev</id> 
     <!-- Some other logic here, if necessary. 
      Otherwise, there's no need for another profile. --> 
    </profile> 
</profiles> 

Um in Dev-Modus ausführen Sie folgende anrufen:

mvn -Pdev compile 

So führen in Produktionsmodus nur die normalen Schritte aus:

mvn compile 

Falls Sie nicht wollen/müssen Sie etwas Besonderes in Ihrem Dev-Profil definieren, Sie können die Deklaration weglassen und Ihren Dev-Modus so aufrufen (! deaktiviert ein Profil):

mvn -P!production compile 

Beachten Sie: Sie können das Ausrufezeichen entkommen müssen, da es sich um ein Sonderzeichen in bash ist:

mvn -P\!production compile 
+0

Fügen Sie bitte diese Schritte hinzu: 1) Um das Projekt mit den Plugins zu starten, erstellen Sie einfach wie gewohnt; 2) Um das Projekt ohne die Plugins auszuführen, führen Sie 'mvn clean package ... -P! Production' aus. Hinweis: Das 'dev'-Profil ist nicht notwendig, wenn es nichts bestimmtes enthält. Der '-P! ProfileName' sollte ausreichen, um das Profil auszuschließen. – carlspring

+0

@carlspring danke für Ihre Vorschläge, bearbeitet meinen Beitrag –

+1

@carlspring Könnten Sie mir bitte helfen, warum ich diesen Fehler bekomme? '$ mvn -P Produktion sauber -bash:! Produktion: Veranstaltung nicht gefunden –

27

Es gibt eine nette Art und Weise ist Plugin Ausführung zu deaktivieren, wenn spezifische Profil aktiv ist.

Zunächst müssen Sie sich wie eine Kennung Plugin Ausführung hinzuzufügen:

<build> 
    <plugins> 
     <!-- (...) --> 
     <plugin> 
      <groupId>nl.geodienstencentrum.maven</groupId> 
      <artifactId>sass-maven-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <id>styles-compilation</id> <!-- plugin execution identifier --> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>update-stylesheets</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Dann müssen Sie ein Profil definieren, in dem dieses Plugin nicht ausgeführt werden:

<profiles> 
    <profile> 
     <id>no-sass</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>nl.geodienstencentrum.maven</groupId> 
        <artifactId>sass-maven-plugin</artifactId> 
        <version>2.1</version> 
        <executions> 
         <execution> 
          <id>styles-compilation</id> <!-- here there must be the same identifier as defined in <build><plugins> section --> 
          <phase>none</phase> <!-- this disables plugin --> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Nun, wenn Sie run standard maven build:

mvn clean package 

das sass-maven-plugin wird ausgeführt, doch beim Laufen:

mvn clean package -P no-sass 

die Sass-Maven-Plugin nicht ausgeführt werden.

1

Aufbauend auf der Antwort von Krzysiek müssen Sie keine expliziten Ausführungen definieren. Schauen Sie sich nur die Ausgabe an, die Sie erhalten, und deaktivieren Sie die Standardausführungen.

Zum Beispiel angesichts der folgenden Ausgabe von Maven:

[INFO] --- maven-resources-plugin:2.7:copy-resources (prepare-dockerfile) @ tilbud --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
... 
[INFO] 
[INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ tilbud --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
.... 
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ tilbud --- 
... 
[INFO] 
[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ tilbud --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
... 
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ tilbud --- 
.... 

Die generierten Standardausführung Namen in Klammern nach dem Plug-in und Ziel aufgeführt ist. Das folgende Profil deaktiviert die obigen Plugins:

<profiles> 
    <profile> 
     <id>packageOnly</id> 
     <build> 
      <pluginManagement> 
       <plugins> 
        <plugin> 
         <artifactId>maven-compiler-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>default-compile</id> 
           <phase>none</phase> 
          </execution> 
          <execution> 
           <id>default-testCompile</id> 
           <phase>none</phase> 
          </execution> 
         </executions> 
        </plugin> 
        <plugin> 
         <artifactId>maven-surefire-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>default-test</id> 
           <phase>none</phase> 
          </execution> 
         </executions> 
        </plugin> 
        <plugin> 
         <artifactId>maven-resources-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>default-resources</id> 
           <phase>none</phase> 
          </execution> 
          <execution> 
           <id>default-testResources</id> 
           <phase>none</phase> 
          </execution> 
          <execution> 
           <id>prepare-dockerfile</id> 
           <phase>none</phase> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </pluginManagement> 
     </build> 
    </profile> 
</profiles> 
Verwandte Themen