2011-08-16 12 views
11

Tôi có một pom với nhiều thực thi lắp ráp. Khi tôi chạy, ví dụ: mvn package, nó chạy tất cả các thực thi. Làm thế nào tôi có thể nói nó chỉ chạy thực thi foo?Maven: làm thế nào để chỉ định thực hiện lắp ráp plugin chạy

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

Những gì tôi có ở trên, trong tâm trí của tôi, tương tự như sau Makefile:

all: foo bar 

foo: 
    ... build foo ... 

bar: 
    ... build bar ... 

tôi có thể chạy một make all hoặc đơn giản là make để xây dựng tất cả mọi thứ, hoặc tôi có thể chạy make foo hoặc make bar để xây dựng các mục tiêu riêng lẻ. Làm thế nào tôi có thể đạt được điều này với Maven?

Trả lời

25

Bạn cần phải sử dụng profiles, đây là một ví dụ pom.xml:

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

Và bạn sẽ gọi maven như thế này:

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

Maven của tôi là một chút gỉ nhưng tôi nghĩ bạn có thể làm điều này một vài cách sau:

1) Sử dụng hồ sơ. Chỉ định một hồ sơ trên dòng lệnh với "maven -PprofileName".

2) Đưa các hành động của bạn vào các giai đoạn/mục tiêu riêng biệt và chỉ chạy những mục bạn muốn.

2

Nếu bạn không muốn "thanh" chạy, thì đừng liên kết nó với giai đoạn vòng đời. Lệnh thực thi chỉ chạy khi chúng bị ràng buộc vào một pha và giai đoạn đó thực hiện như một phần của một bản dựng. Như TheCoolah đã đề xuất, các hồ sơ là một cách để quản lý khi các hành động bị ràng buộc trong các vòng đời và khi không.