2011-07-19 29 views
6

Tôi muốn sử dụng trình cắm bổ sung maven để kiểm tra xem tôi có các lớp trùng lặp trên đường dẫn của mình hay không. Tôi đã thử ví dụ từ here.cách sử dụng plugin maven executecer

Nhưng khi tôi chạy nó như vậy:

mvn enforcer:enforce

tôi có được điều này:

Không thể thực hiện mục tiêu org.apache.maven.plugins: maven-enforcer-plugin: 1.0.1: thực thi (mặc định-cli) trên trình dữ liệu dự án: Các tham số 'quy tắc' cho mục tiêu org.apache.maven.plugins: maven-enforcer-plugin: 1.0.1: thực thi là thiếu hoặc không hợp lệ

Có cách nào để sử dụng chính xác không?

EDIT # 1

Nếu thay đổi cấu hình của tôi như thế này:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.0.1</version> 
      <executions> 
       <execution> 
        <id>enforce-versions</id> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <AlwaysPass /> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Tạo các lỗi tương tự.

Trả lời

15

Lý do tại sao phiên bản đầu tiên của bạn không làm việc là bởi vì có một sự khác biệt giữa cấu hình trình cắm bên trong thẻ thực thi và cấu hình trình cắm bên ngoài thẻ thực thi. Việc thực hiện chỉ được sử dụng khi trình cắm thêm của bạn được kích hoạt bởi một giai đoạn đặc biệt của bản dựng Maven hoàn chỉnh.

Các Maven guide to configuration giải thích nó tốt hơn:

Cấu hình bên trong thẻ khác với những người nằm ngoài ở chỗ chúng không thể được sử dụng từ một dòng lệnh gọi trực tiếp. Thay vào đó chúng chỉ được áp dụng khi giai đoạn vòng đời mà chúng bị ràng buộc được gọi. Ngoài ra, nếu bạn di chuyển phần cấu hình bên ngoài phần thực thi, nó sẽ áp dụng chung cho tất cả các yêu cầu của plugin.

+4

Mục tiêu thực thi là [bound] (http://maven.apache.org/enforcer/maven-enforcer-plugin/enforce-mojo.html) với giai đoạn vòng đời 'validate'. Do đó, để thực hiện 'executecer: enforce', bạn có thể chỉ cần gõ ' mvn validate' – rwitzel

+2

Ngắn của các cấu hình, có cách nào để xác định các thực thi mà không gọi 'validate'? Tôi có một kịch bản mà tôi _just_ muốn xác nhận 'requireReleaseDeps', nhưng không có gì khác ở giai đoạn này trong quá trình xây dựng. – Snekse

3

Tôi không biết tại sao nó sẽ không làm việc với cấu hình là trong một thực hiện, nhưng điều này đã làm việc cho tôi:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.0</version> 
      <configuration> 
       <rules> 
        <banDuplicateClasses> 
         <findAllDuplicates>true</findAllDuplicates> 
        </banDuplicateClasses> 
       </rules> 
       <fail>false</fail> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>extra-enforcer-rules</artifactId> 
        <version>1.0-alpha-1</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
11

Hãy thử điều này, di chuyển cấu hình bên ngoài thực thi, vì vậy nó không bị ràng buộc với giai đoạn vòng đời.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.0.1</version> 
    <executions> 
     <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <rules> 
      <AlwaysPass /> 
     </rules> 
     <fail>true</fail> 
    </configuration> 
</plugin> 

Bây giờ, khi bạn thực hiện mvn enforcer:enforce, nó sẽ chọn quy tắc từ tệp pom.xml của bạn.

3

Xem những answers

Bạn có thể sử dụng dòng lệnh mặc định thực hiện id đặc biệt, mặc định-cli để gọi nó (xem Maven Docs), xem ví dụ của tôi dưới đây. Này hoạt động ít nhất là với 3.1.1 và bài viết được trích dẫn nói rằng họ sẽ làm việc với 2.2.0+

mvn enforcer:enforce 

Tuy nhiên nếu bạn đang sử dụng trên Maven 3.1.1 (Tôi có thể xác nhận nó hoạt động trong 3.3.3 với thi hành v 1.4.1) bạn có thể chỉ định id thực thi bạn muốn bằng cú pháp @ mới (xem Maven JIRA và các câu trả lời ở trên);

ví dụ: cho ví dụ dưới đây sử dụng

mvn enforcer:[email protected] 

Đây là một đoạn từ pom của tôi;

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.4.1</version> 
      <executions> 
       <execution> 
        <id>dependency-convergence</id> 
        <phase>install</phase> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <DependencyConvergence /> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
       <execution> 
        <id>default-cli</id> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <DependencyConvergence/> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     ... 
+0

Tôi vừa thực hiện yêu cầu kéo để làm rõ tài liệu liên quan đến điều này: https://github.com/apache/maven-site/pull/7 –

Các vấn đề liên quan