2011-08-16 15 views
11

Mam pom z wieloma wykonaniami montażowymi. Po uruchomieniu, np. mvn package, uruchamia wszystkie wykonania. Jak mogę powiedzieć, aby uruchomić tylko wykonanie foo?Maven: jak określić, które wykonanie wtyczki zestawu uruchamia się

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>foo/id> 
        <phase>package</phase> 
        <goals><goal>single</goal></goals> 
        <configuration>...</configuration> 
       </execution> 
       <execution> 
        <id>bar</id> 
        <phase>package</phase> 
        <goals><goal>single</goal></goals> 
        <configuration>...</configuration> 
       </execution> 

Co mam powyżej jest w moim umyśle, podobny do następującego Makefile:

all: foo bar 

foo: 
    ... build foo ... 

bar: 
    ... build bar ... 

mogę uruchomić make all lub po prostu make zbudować wszystko, czy mogę uruchomić make foo lub make bar do budować indywidualne cele. Jak mogę to osiągnąć z Mavenem?

Odpowiedz

25

Trzeba użyć profiles, tutaj jest pom.xml przykład:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.mycompany</groupId> 
    <artifactId>FooBar</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 

    <profiles> 

     <profile> 
      <id>Foo</id> 
      <build> 
       <plugins> 
        <plugin> 
         <artifactId>maven-assembly-plugin</artifactId> 
         <executions> 
         <execution> 
          <id>foo/id> 
          <phase>package</phase> 
          <goals><goal>single</goal></goals> 
          <!-- configuration>...</configuration --> 
         </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 

     <profile> 
      <id>Bar</id> 
      <build> 
       <plugins> 
        <plugin> 
         <artifactId>maven-assembly-plugin</artifactId> 
         <executions> 
         <execution> 
          <id>Bar</id> 
          <phase>package</phase> 
          <goals><goal>single</goal></goals> 
          <!-- configuration>...</configuration --> 
         </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 

    </profiles> 

</project> 

I czy powołać Maven tak:

mvn package -P Foo // Only Foo 
mvn package -P Bar // Only Bar 
mvn package -P Foo,Bar // All (Foo and Bar) 
8

Moja Maven jest nieco zardzewiały, ale myślę, że można to kilka sposobów zrobić:

1) Za pomocą profili. Określ profil w wierszu poleceń za pomocą "maven -ProfilName".

2) Umieść egzekucje w oddzielnych fazach/celach i uruchom tylko te, które chcesz.

2

Jeśli nie chcesz, aby działał "pasek", nie wiąż go do fazy cyklu życia. Wykonania wtyczki działają tylko wtedy, gdy są powiązane z fazą i ta faza jest wykonywana jako część kompilacji. Jak sugeruje TheCoolah, profile są jednym ze sposobów zarządzania, gdy egzekucje są powiązane z fazami cyklu życia, a kiedy nie.

Powiązane problemy