2012-10-23 20 views
40

Tôi đang định cấu hình dự án con maven cha mẹ nhiều mô-đun bằng maven và eclipse m2e, tôi đang sử dụng các công cụ mới nhất từ ​​nhật thực Juno SR1 là m2e 1.2.0Làm thế nào để loại bỏ "maven-thi hành-plugin (mục tiêu" thi hành ") được bỏ qua bởi m2e" cảnh báo bằng nhật thực?

pom cha mẹ sử dụng plugin thực thi, vì vậy, cha mẹ pom.xml có những điều sau đây trong phần plugin của nó

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.1.1</version> 
    <executions> 

     <!-- Enforce that all versions of a transative dependency must converge. --> 
     <execution> 
      <id>enforce</id> 
      <configuration> 
       <rules> 
        <DependencyConvergence /> 
       </rules> 
      </configuration> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
     </execution> 

     <!-- Black list certain jars --> 
     <execution> 
      <id>enforce-banned-dependencies</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
        <bannedDependencies> 
         <excludes> 
          <exclude> 
           commons-logging:commons-logging 
          </exclude> 
         </excludes> 
        </bannedDependencies> 
       </rules> 
       <fail>true</fail> 
      </configuration> 
     </execution> 

    </executions> 
</plugin> 

Mỗi phòng trong số các dự án con đã một thông báo lỗi nói maven-enforcer-plugin (goal "enforce") is ignored by m2e.

  • ý nghĩa của thông điệp này là gì?
  • Làm cách nào để định cấu hình mọi thứ để loại bỏ thông báo này?
  • tôi có cần định cấu hình cài đặt dự án eclipse hoặc cài đặt pom.xml không?

Trả lời

52

Plugin eclipse maven chạy tệp pom.xml dự án để tìm hiểu cách dự án maven được định cấu hình và dịch cấu hình maven pom.xml thành cấu hình nhật thực. Một tệp pom.xml có thể tham chiếu đến một số tùy chọn bổ sung maven và mỗi plugin có khả năng rò rỉ bộ nhớ hoặc làm những việc có hại cho nhật thực. Vì vậy, theo mặc định, plugin eclipse m2e bỏ qua bất kỳ plugin maven nào trừ khi các plugin maven có một đầu nối plugin m2e đặc biệt cho m2e cách tích hợp plugin maven vào nhật thực. Trong m2e tóm tắt là bảo vệ quá trình JVM eclipse chống lại một plugin maven buggy, bằng cách nói rằng đối với mỗi plugin maven có cần phải là một kết nối m2e để cầu nối giữa maven và nhật thực.

Vì vậy, để thoát khỏi cảnh báo tôi đã thêm dòng sau vào phần quản lý Plugin của tôi về pom.xml mẹ

<build> 
    <pluginManagement> 
    <plugins> 
     <plugin> 
     <groupId>org.eclipse.m2e</groupId> 
     <artifactId>lifecycle-mapping</artifactId> 
     <version>1.0.0</version> 
     <configuration> 
      <lifecycleMappingMetadata> 
      <pluginExecutions> 
       <pluginExecution> 
       <pluginExecutionFilter> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-enforcer-plugin</artifactId> 
        <versionRange>[1.0.0,)</versionRange> 
        <goals> 
        <goal>enforce</goal> 
        </goals> 
       </pluginExecutionFilter> 
       <action> 
        <ignore /> 
       </action> 
       </pluginExecution> 
      </pluginExecutions> 
      </lifecycleMappingMetadata> 
     </configuration> 
     </plugin> 
    </plugins> 
    </pluginManagement> 
</build> 

Dường như org.eclipse.m2e:lifecycle-mapping là một maven có plugin được thiết kế để chứa dữ liệu meta để giao tiếp với nhật thực toàn phần m2e plugin khi nó xử lý một pom.xml maven và thông tin này được sử dụng để nói với nhật thực những gì làm với các plugin maven được định nghĩa trong pom.xml khi eclipse chạy tệp pom.xml như là một phần của giao diện người dùng eclipse.

+1

+1 thú vị đủ, điều này cũng hoạt động trên POM trẻ em. –

+3

@ams câu trả lời của bạn đã làm các trick! Nhưng ... Tôi đã đặt plugin bản đồ vòng đời trong phần bổ trợ và nó không hoạt động, nó cần nằm trong phần pluginManagement pom (như trong ví dụ của bạn!) Hy vọng điều này sẽ tiết kiệm cho ai đó một vài phút khó chịu để tìm hiểu lý do tại sao giải pháp không hoạt động. –

+0

Nếu có thể nâng cấp trình bổ sung maven-enforcer-plugin lên phiên bản 1.4+. Khoảng tháng 1 năm 2015, Karl Heinz Marbaise đã thêm siêu dữ liệu vòng đời m2e vào plugin maven này với bản sửa lỗi này: "Thêm bản đồ m2e", https://issues.apache.org/jira/browse/MENFORCER-219. Sau đó, bạn sẽ không phải thêm siêu dữ liệu m2e theo cách thủ công. – buzz3791

2

Chỉ cần một FYI cho những người trong số các bạn có vấn đề với cấu hình IDE của bạn trong mô hình xây dựng của bạn. Giữ một mắt trên yêu cầu tăng cường này hiện đang nhắm mục tiêu cho Kepler phát hành:

Bug 350.414: Lưu trữ lờ nối M2E ngoài pom.xml dự án https://bugs.eclipse.org/bugs/show_bug.cgi?id=350414

+0

Thx cho những nỗ lực của bạn về điều này. Thật tuyệt, nó sẽ được thêm vào bản phát hành m2e tiếp theo. – Snicolas

0

Đối với tôi nó cũng tương tự như vấn đề

tôi đã maven 3.0.3 và java 1,5

và pom tôi đã

<executions> 
        <execution> 
         <id>enforce-versions</id> 
         <goals> 
          <goal>enforce</goal> 
         </goals> 
         <configuration> 
          <rules> 
           <requireMavenVersion> 
            <version>[3.0.3,2.2.1,)</version> 
           </requireMavenVersion> 
           <requireJavaVersion> 
            <version>[1.7, 1.8)</version> 
           </requireJavaVersion> 
          </rules> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

Như bạn có thể thấy tôi không thực sự đã đáp ứng các quy tắc, do đó tôi cập nhật Java và có mvn đi và tôi đã được tất cả các thiết lập. Hy vọng điều này sẽ giúp một ai đó.

0

Một lỗ hổng khác tồn tại khi có một số pluginExecutionFilters. Chúng phải ở đúng vị trí trong tệp pom.xml! Đối với tôi nó đã được gnarly để tìm thấy là không có lỗi hoặc cảnh báo của các displacement tồn tại.

Đây là mã phù hợp với việc có nhiều pluginExecutionFilters:

<build> 
    <pluginManagement> 
    <plugins> 
     <plugin> 
     <groupId>org.eclipse.m2e</groupId> 
     <artifactId>lifecycle-mapping</artifactId> 
     <version>1.0.0</version> 
     <configuration> 
     <lifecycleMappingMetadata> 
      <pluginExecutions> 
       <pluginExecution> 
        <pluginExecutionFilter> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-enforcer-plugin</artifactId> 
         <versionRange>[1.0.0,)</versionRange> 
         <goals> 
          <goal>enforce</goal> 
         </goals> 
        </pluginExecutionFilter> 
        <action><ignore/></action> 
       </pluginExecution> 
<!-- now here follows the new filter --> 
       <pluginExecution> 
        <pluginExecutionFilter> 
         <groupId>com.googlecode.maven-java-formatter-plugin</groupId> 
         ... 
4

Từ phiên bản M2E 1.4 và cao hơn: Bạn có thể tích hợp vòng đời cấu hình cần thiết trong pom (mẹ-pom hoặc dự án-pom) hoặc bạn có thể tích hợp các thông tin vào cấu hình m2e toàn cầu trong nhật thực. Ngoài ra, bạn có một số hành động quickfix để áp dụng các thay đổi này.

Tùy chọn cuối cùng là tìm đầu nối m2e hoặc chuyển sang phiên bản mới hơn của các trình bổ sung maven khác nhau với hỗ trợ m2e tích hợp (ví dụ: đối với jaxb-plugins).

Ở đây (đối với plugin thực thi) tôi nghĩ, định nghĩa trong pom là cách dễ nhất.

Xem thêm: https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html

0

Làm thế nào để loại bỏ các “maven-enforcer-plugin (mục tiêu” thực thi “) được bỏ qua bởi M2E” cảnh báo bởi nhật thực?

Mặc dù thực plugin lifecycle-mapping đã làm việc cho tôi trên các dự án khác, Tôi hiện đang làm việc trong một cửa hàng với Eclipse bí mật của tôi IntelliJ và tôi không muốn để lộ bản thân mình bằng cách thay đổi tất cả các tập tin pom của họ để bao gồm bất cứ điều gì từ nhóm org.eclipse.m2e.

Sau một số thử nghiệm, tôi thấy rằng bạn có thể nhận được cảnh báo này để không hiển thị bằng cách thay đổi Ánh xạ vòng đời trong tùy chọn Maven. Thành thật mà nói, tôi không chắc chắn 100% điều này đang làm nhưng tôi không thấy bất kỳ tác dụng phụ nào ...

Đi tới: Tuỳ chọn & điều chỉnh; Maven & rightarrow; Ánh xạ vòng đời. Nhấp vào Open workspace lifecycle mappings metadata sẽ mở tệp lifecycle-mapping-metadata.xml trong tab ở chế độ nền. Tôi cho rằng điều này cooresponds đến tập tin sau đây theo subdir workspace của bạn:

.metadata/.plugins/org.eclipse.m2e.core/lifecycle-mapping-metadata.xml 

Tiếp theo, thêm đoạn thơ sau vào dưới cùng của tập tin bên trong <pluginExecutions>...</pluginExecutions>.

<pluginExecution> 
    <pluginExecutionFilter> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <versionRange>[1.0.0,)</versionRange> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
    </pluginExecutionFilter> 
    <action> 
     <ignore /> 
    </action> 
</pluginExecution> 

Khi tệp XML được lưu, bạn sẽ cần quay lại cửa sổ tùy chọn và nhấn Reload workspace lifecycle mappings metadata để biên dịch tệp bằng cách nào đó. Cuối cùng, bạn sẽ cần phải làm một dự án cập nhật maven trên tất cả các dự án của bạn để xem các cảnh báo biến mất.

Hy vọng điều này sẽ hữu ích.

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