2013-01-23 14 views
14

Szukam sposobu wyłączenia wykonania wtyczki, jeśli działa z określonym profilem. Jest to przeciwieństwo running a plugin if a profile is selected.Wyłączanie wtyczek maven podczas korzystania z określonego profilu

Mój przypadek użycia: Moja kompilacja maven ma cały ładunek wtyczek, ale podczas pracy na mojej maszynie programistycznej, chcę pominąć niektóre z nich. Zamiast komentować te wtyczki lokalnie, chcę móc uruchomić kompilację z profilem "dev". Wtyczki będą nadal działać w mojej ciągłej kompilacji.

Pomysły?

+2

Występuje żądanie funkcji dla elementu we wszystkich wtyczkach. http://jira.codehaus.org/browse/MNG-3102 – ben75

+0

Wymagałoby to wszystkich wtyczek, które muszą obsługiwać te funkcje. Myślałam raczej w kategoriach '< dev/run-contidion>' – jrharshath

+0

można opracować trochę więcej, co dokładnie chcesz osiągnąć? Jakieś opakowanie? Testy itp.? albo co? Być może możesz podać fragmenty swoich plików pom (s)? – khmarbaise

Odpowiedz

13
  • Zdefiniuj pom tak, że ma tylko wtyczki potrzebne w trybie dev
  • Zdefiniuj profil dev
  • Zdefiniuj profil produkcyjny, który zawiera wszystkie pluginy chcesz/potrzebujesz
  • Zdefiniuj profil produkcji domyślnie

przykład 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> 

Aby uruchomić w trybie Dev można wywołać następujące:

mvn -Pdev compile 

Aby uruchomić w trybie produkcyjnymwystarczy użyć normalnych czynności:

mvn compile 

W przypadku, gdy nie ma/musisz zdefiniować coś specjalnego w profilu swojego dewelopera, możesz pominąć jego deklarację i zadzwonić do tego Dev Mode w ten sposób (! wyłącza profil):

mvn -P!production compile 

Należy pamiętać: może trzeba uciec się wykrzyknik, ponieważ jest to znak specjalny w bash:

mvn -P\!production compile 
+0

Proszę dodać następujące kroki: 1) Aby uruchomić projekt z wtyczkami, po prostu buduj jak zwykle; 2) Aby uruchomić projekt bez wtyczek, uruchom 'mvn clean package ... -P! Production'. Uwaga: Profil 'dev' nie jest konieczny, jeśli nie zawiera niczego szczególnego. Nazwa -P! ProfileName powinna wystarczyć do wykluczenia profilu. – carlspring

+0

@carlspring dziękuję za sugestie, zredagowałem mój post –

+1

@carlspring Czy mógłbyś mi pomóc, dlaczego dostaję ten błąd? '$ mvn -P! production clean -bash:! production: event not found' –

27

Jest zgrabny sposób, aby wyłączyć wykonanie wtyczki gdy dany profil jest aktywny.

Po pierwsze trzeba dodać identyfikator do wtyczki wykonanie jak:

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

Następnie trzeba zdefiniować profil, w którym ten plugin NIE będzie wykonane:

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

Teraz, jeśli uruchom standardową budowę maven:

mvn clean package 

sass-maven-plugin będą wykonana, jeszcze podczas pracy:

mvn clean package -P no-sass 

Sass-maven-plugin nie będzie wykonywany.

1

Bazując na odpowiedzi Krzyśka, nie trzeba definiować jawnych egzekucji, wystarczy rzucić okiem na wyjście maven i wyłączyć domyślne egzekucje.

Na przykład, biorąc pod uwagę następujące wyjście z 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 --- 
.... 

Generowane nazwy wykonanie domyślne są wymienione w nawiasach po wtyczce i cel. Poniższy profil wyłącza powyższe wtyczki:

<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> 
Powiązane problemy