2012-10-02 12 views
7

Używam elementu pluginManagement w moim rodzicu pom.xml do konfiguracji wtyczek dla wszystkich jego dzieci. Na przykład, mam następującą konfigurację:Maven plugin Dzielenie się dziwnym zachowaniem konfiguracji dziedziczenia

<pluginManagement> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
       <id>copy-artifacts</id> 
       <phase>install</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>some/where/else</outputDirectory> 
        <resources> 
         <resource> 
          <directory>some/another/resource</directory> 
         </resource> 
        </resources> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
       <id>copy-dependencies</id> 
       <phase>install</phase> 
       <goals> 
        <goal>copy-dependencies</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>deps/dir</outputDirectory> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</pluginManagement> 

Oficjalna dokumentacja stwierdza, że ​​plugin skonfigurowany w pluginManagement nadal musi być dodana do plugins elementu u dzieci poms. W istocie, jeżeli to usunąć z POM dziecko:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
</plugin> 

następnie maven-dependency-plugin zatrzymuje wypalania w install fazie. Wydaje się jednak, że nie ma to wpływu na inne wtyczki, a mianowicie maven-resource-plugin. Nawet jeśli nie mam

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
</plugin> 

moim dzieckiem pom jego copy-resources celem nadal wystrzeliwuje w install fazie i wykonuje pracę jest skonfigurowany do zrobienia.

Dlaczego to zachowanie jest obecne? Czy istnieje lista wtyczek, które są zawsze dziedziczone, czy może czegoś brakuje?

+2

Zapoznaj się z efektywnym pom, aby przeanalizować swoje problemy (przez mvn help: effective-pom). – khmarbaise

+0

Dziękuję, zupełnie o tym zapomniałem. Przyjrzy się. –

Odpowiedz

6

Cały POM nie jest widoczny; ale biorąc pod uwagę zachowanie, które opisujesz, jest słoik, wojna lub ucho, prawda? Wtyczka zasobu jest domyślnie zdefiniowana dla tych typów opakowań. Obejmuje wykonanie, które kopiuje zasoby (zgodnie z opisem @maba).

Ponieważ definicja wtyczki jest zawarta w twoim podopiecznym POM (nawet jeśli NIE umieściłeś go tam bezpośrednio), Maven scala wykonanie zdefiniowane w sekcji <pluginManagement> wykonaniem wykonanym przez Mavena.

Istnieje opisujące domyślne powiązania cyklu życia według typu opakowania. Uwaga: wtyczka dependency nie jest wymieniona; ale resources jest; właśnie dlatego obserwujesz różnicę. Uruchomienie z -X wyświetli wykonanie pluginów.

+0

Tak, moje opakowanie pom jest słoik. Jest tak dlatego, że 'resource-plugin' jest dołączany automatycznie, automatycznie dziedziczy również całą konfigurację z' pluginManagement', prawda? Wtedy, jak sądzę, znalazłem odpowiedź. Myślałem, że to coś takiego. Dziękuję Ci bardzo! –

+1

@ VladimirMatveev Tak, istnieją również inne wtyczki, które są również domyślnie włączone. Jednym z oczywistych jest 'maven-compiler-plugin'. – maba

+1

@VladimirMatveev Myślę, że możesz znaleźć podstawowe wtyczki tutaj: [Maven Dostępne wtyczki] (http://maven.apache.org/plugins/index.html). – maba

1

Domyślnie Maven kopiuje zasoby znajdujące się wewnątrz src/main/resources.

Od Maven Getting Started Guide:

Prosta zasada zatrudniony przez Maven to: wszelkie katalogi lub pliki umieszczone w katalogu ${basedir}/src/main/resources są pakowane w słoik z dokładnie taką samą strukturę zaczynając od podstawy JAR.

+0

Wiem o 'src/main/resources', ale moja konfiguracja (może nie powinienem zastąpić go przez ellipsis, pomyślałem, że to niepotrzebne marnowanie przestrzeni) kopiuje kilka plików do różnych lokalizacji, i to jest to, co działa pomimo tego, że wtyczka jest usuwana z potomka pom. Zaktualizowałem moje pytanie w tej sprawie. –

Powiązane problemy