2013-01-23 30 views
14

Tôi đang tìm cách tìm cách vô hiệu hóa thực thi plugin nếu chạy với một cấu hình cụ thể.Vô hiệu hóa các plugin maven khi sử dụng một cấu hình cụ thể

Điều này ngược lại với running a plugin if a profile is selected.

Trường hợp sử dụng của tôi: Xây dựng maven của tôi có tải toàn bộ plugin, nhưng khi chạy trên máy tính của tôi, tôi muốn bỏ qua một số trong số đó. Thay vì nhận xét các plugin đó tại địa phương, tôi muốn có thể chạy bản dựng với cấu hình "dev". Các plugin sẽ tiếp tục chạy trên bản dựng liên tục của tôi.

Ý tưởng?

+2

Có yêu cầu tính năng đối với phần tử trong tất cả các plugin. http://jira.codehaus.org/browse/MNG-3102 – ben75

+0

Điều đó sẽ liên quan đến tất cả các plugin phải hỗ trợ tính năng này. Tôi đã suy nghĩ nhiều hơn về ' dev ' – jrharshath

+0

Bạn có thể xây dựng thêm một chút chính xác những gì bạn muốn đạt được không? Một số loại bao bì? Kiểm tra vv? hay cái gì? Có thể bạn có thể trích đoạn tệp pom của bạn không? – khmarbaise

Trả lời

13
  • Xác định pom của bạn để là chỉ có các plugin cần thiết trong chế độ dev
  • Xác định một hồ sơ dev
  • Xác định một hồ sơ cá nhân sản xuất, trong đó có tất cả các plugin bạn muốn/cần
  • Xác định hồ sơ cá nhân sản xuất như mặc định

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

Để chạy trong Dev Chế độ bạn có thể gọi như sau:

mvn -Pdev compile 

Để chạy trong Sản xuất Chế độ chỉ cần sử dụng các bước bình thường:

mvn compile 

Trong trường hợp bạn không muốn/cần phải xác định bất kỳ điều gì đặc biệt trong hồ sơ nhà phát triển của mình, bạn có thể bỏ qua tuyên bố của nó và gọi Chế độ Dev như thế này (! tắt hồ sơ):

mvn -P!production compile 

Hãy nhận biết: bạn có thể cần phải thoát khỏi dấu chấm than vì nó là một nhân vật đặc biệt trong bash:

mvn -P\!production compile 
+0

Xin vui lòng, thêm các bước sau: 1) Để chạy dự án với các plugin, chỉ cần xây dựng như bình thường; 2) Để chạy dự án mà không cần bổ sung, thực thi 'mvn clean package ... -P! Production'. Lưu ý: Hồ sơ 'dev' là không cần thiết, nếu nó không chứa bất cứ điều gì đặc biệt. '-P! ProfileName' phải đủ để loại trừ cấu hình. – carlspring

+0

@carlspring cảm ơn bạn đã đề xuất, đã chỉnh sửa bài đăng của tôi –

+1

@carlspring Bạn có thể vui lòng giúp tôi về lý do tôi nhận được lỗi này không? '$ mvn -P! production clean -bash:! production: event not found' –

27

Có một cách gọn gàng để vô hiệu hóa thực hiện cắm khi cấu hình cụ thể đang hoạt động.

Trước hết bạn cần phải thêm một định danh để cắm thực hiện như:

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

Sau đó, bạn cần phải xác định một hồ sơ trong đó plugin này sẽ KHÔNG được thực thi:

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

Bây giờ nếu bạn chạy maven chuẩn xây dựng:

mvn clean package 

sass-maven-plugin sẽ được thực hiện, tuy nhiên khi chạy:

mvn clean package -P no-sass 

các sass-maven-plugin sẽ không được thực thi.

1

Xây dựng dựa trên câu trả lời của Krzysiek, bạn không cần phải xác định các thực thi rõ ràng, chỉ cần nhìn vào maven đầu ra cung cấp cho bạn và vô hiệu hóa các thực thi mặc định.

Ví dụ, đưa đầu ra sau đây từ 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 --- 
.... 

Tên thực hiện mặc định tạo ra được liệt kê trong ngoặc sau khi các plugin và mục tiêu. Hồ sơ sau tắt các plugin ở trên:

<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> 
Các vấn đề liên quan