Thực thi plugin không được bao phủ bởi cấu hình vòng đời (JBossas 7 EAR archetype)


123

Tôi đang sử dụng Eclipse 3.7 Indigo với Maven M2E Plugin 1.0.100.

Sử dụng nguyên mẫu EAR JBoss 7.x JavaEE 6, pom cho EAR gây ra lỗi này cho tôi:

Thực thi plugin không nằm trong cấu hình vòng đời: org.apache.maven.plugins: maven-Ear-plugin: 2.6: created-application-xml (thực thi: default-created-application-xml, phase: created-resource)

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-ear-plugin</artifactId>
   <version>2.6</version>
   <configuration>
      <!-- Tell Maven we are using Java EE 6 -->
      <version>6</version>
      <!-- Use Java EE ear libraries as needed. Java EE ear libraries 
                  are in easy way to package any libraries needed in the ear, and automatically 
                  have any modules (EJB-JARs and WARs) use them -->
      <defaultLibBundleDir>lib</defaultLibBundleDir>
      <modules></modules>
   </configuration>
<plugin>

Câu trả lời:


138

Đây là một "tính năng" của plugin M2E đã được giới thiệu cách đây một thời gian. Nó không liên quan trực tiếp đến plugin JBoss EAR nhưng cũng xảy ra với hầu hết các plugin Maven khác.

Nếu bạn có một thực thi plugin được xác định trong pom(như thực thi maven-ear-plugin:generate-application-xml), bạn cũng cần thêm thông tin cấu hình bổ sung cho M2E để cho M2E biết phải làm gì khi quá trình xây dựng được chạy trong Eclipse, ví dụ như việc thực thi plugin bị bỏ qua hoặc được thực thi bởi M2E, cũng nên được thực hiện cho các bản dựng gia tăng, ... Nếu thông tin đó bị thiếu, M2E phàn nàn về nó bằng cách hiển thị thông báo lỗi này:

"Thực thi plugin không được bao phủ bởi cấu hình vòng đời"

Xem ở đây để được giải thích chi tiết hơn và một số cấu hình mẫu cần được thêm vào pom để làm cho lỗi đó biến mất:

https://www.eclipse.org/m2e/documentation/m2e-execut-not-covered.html


70
@ Tôi không hiểu khái niệm này. M2E nên minh bạch cho người dùng. Làm những gì mà dòng lệnh Maven làm, nhưng từ trong nhật thực. Không nên có dữ liệu cấu hình pom để cho M2E biết phải làm gì. Nếu có, thì đó là một thiết kế tồi. BTW, các lỗi này đôi khi không xuất hiện trong các phiên bản mới hơn của Eclipse và M2E.
mừng

8
Tôi đồng ý với sự sung sướng. POM của tôi không phụ thuộc vào m2e và tôi muốn thêm ngay bây giờ chỉ vì tôi tình cờ sử dụng Eclipse làm IDE của mình. Đó là một sự mạo danh đối với những người khác làm việc trong cùng một dự án có thể đang sử dụng một IDE khác như IntelliJ. Nếu m2e cần những gợi ý này thì nó nên là một phần của cấu hình m2e trong Eclipse.
William

12
Một số mục tiêu không có ý nghĩa khi ở trong Eclipse. Ví dụ, tôi có các dự án trong đó các tệp ZIP được giải nén vào targetthư mục. Bạn sẽ không muốn điều đó được thực hiện lại "tăng dần" khi lưu từng tệp nguồn. Hoặc có thể bạn làm muốn điều đó. Thực sự, m2e không có ý tưởng về bản dựng cụ thể của bạn. Bạn có thể lưu trữ những gì m2e nên làm trong Eclipse, POM hoặc có thể cài đặt một trình kết nối m2e để thêm kiến ​​thức cho m2e để xử lý bước xây dựng. Đây là những lựa chọn mà bạn nên nhìn thấy. Tôi hiểu rằng bạn không muốn làm cho POM m2e của bạn biết, nhưng đó là một nơi tốt để định cấu hình tập trung này cho tất cả các nhà phát triển của bạn.
Sander Verhagen

3
Vấn đề là tài liệu được liên kết cho việc này, giống như hầu hết các tài liệu về Maven hoặc Eclipse. là abcacadabra. Cho dù họ cố gắng giải thích rõ ràng đến mức nào, thì lời giải thích dựa trên quá nhiều khái niệm mà tôi với tư cách là một người dùng Maven tương đối mới không hiểu và không biết cách tìm kiếm - mọi thứ tôi tìm thấy đều có cùng một vấn đề: quá nhiều điều không giải thích được các khái niệm. Công nghệ quá phức tạp hoặc tài liệu được tổ chức quá kém. Trong mọi trường hợp, đường cong học tập cao. Các câu trả lời ở đây thêm rất nhiều rõ ràng.
rebierpost

10
@RicardoGladwell Bạn đã hiểu sai mục đích của downvote. Mũi tên nói "câu trả lời này không hữu ích" - và đó là không đúng với câu trả lời này. Vì vậy, mặc dù bạn không thích giai điệu mà câu trả lời này được viết, nhưng downvote vẫn chưa được sử dụng.
Dawood ibn Kareem

43

Dù sao thì cũng đã muộn nhưng giải pháp của tôi chỉ đơn giản là nhấp chuột phải vào thông báo lỗi trong Eclipse và chọn Khắc phục nhanh >> Bỏ qua cho mọi pom có ​​lỗi như vậy


3
Vẫn chưa quá muộn. Tôi chỉ khắc phục vấn đề theo cách này!
rebierpost

2
Tôi cũng vậy. Tất cả các nghiên cứu này và cố gắng hiểu những gì vấn đề đã khiến tôi đau đầu, vì vậy tôi bỏ qua nó :) Cảm ơn.
dleerob

1
Điều này làm việc cho tôi. Tôi nghi ngờ nó tự động tạo ra những gì được mô tả bởi câu trả lời của @ Jan chỉ ra eclipse.org/m2e/documentation/m2e-execut-not-covered.html bởi vì thay đổi duy nhất tôi thấy sau khi tôi chấp nhận sửa chữa nhanh là thay đổi cho pom của tôi. xml.
Michael Osofsky

Tôi đã thử lại trên một máy khác và sự cố đã biến mất khi tôi nâng cấp từ JBehave 3.9.4 lên 3.9.5 vì đó là plugin JBehave, trong trường hợp của tôi, đó là lỗi tạo ra (tôi đã tạo cấu hình plugin từ kiểu lưu trữ JBehave Maven ( jbehave.org/reference/urdy/archetypes.html ))
Michael Osofsky

30

Eclipse đã có khái niệm về các bản dựng gia tăng. Điều này cực kỳ hữu ích vì nó tiết kiệm rất nhiều thời gian.

Cái này hữu ích như thế nào

Giả sử bạn vừa thay đổi một tệp .java. Các trình xây dựng gia tăng sẽ có thể biên dịch mã mà không phải biên dịch lại mọi thứ (sẽ mất nhiều thời gian hơn).

Bây giờ có vấn đề gì với Maven Plugins

Hầu hết các plugin maven không được thiết kế cho các bản dựng tăng dần và do đó nó tạo ra rắc rối cho m2e. m2e không biết mục tiêu plugin là thứ gì đó rất quan trọng hoặc nếu nó không liên quan. Nếu nó chỉ thực thi mọi plugin khi một tệp duy nhất thay đổi, nó sẽ mất rất nhiều thời gian.

Đây là lý do tại sao m2e dựa vào thông tin siêu dữ liệu để tìm ra cách xử lý thực thi. m2e đã đưa ra các tùy chọn khác nhau để cung cấp thông tin siêu dữ liệu này và thứ tự ưu tiên như dưới đây (cao nhất đến thấp nhất)

  1. tệp pom.xml của dự án
  2. cha mẹ, ông bà và các tập tin pom.xml khác
  3. [m2e 1.2+] tùy chọn không gian làm việc
  4. cài đặt phần mở rộng m2e
  5. [m2e 1.1+] siêu dữ liệu ánh xạ vòng đời được cung cấp bởi plugin maven
  6. siêu dữ liệu ánh xạ vòng đời mặc định được vận chuyển với m2e

1,2 đề cập đến việc chỉ định phần Quản lý plugin trong thẻ của tệp pom của bạn hoặc bất kỳ phụ huynh nào. M2E đọc cấu hình này để định cấu hình dự án. Đoạn trích dẫn hướng dẫn m2e bỏ qua các mục tiêu jslintcompressmục tiêu của plugin yuicompressor-maven-plugin

<pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>net.alchim31.maven</groupId>
                                    <artifactId>yuicompressor-maven-plugin</artifactId>
                                    <versionRange>[1.0,)</versionRange>
                                    <goals>
                                        <goal>compress</goal>
                                        <goal>jslint</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

3) Trong trường hợp bạn không thích làm ô nhiễm tệp pom của mình bằng siêu dữ liệu này, bạn có thể lưu trữ tệp này trong tệp XML bên ngoài (tùy chọn 3). Dưới đây là tệp ánh xạ mẫu hướng dẫn m2e bỏ qua các mục tiêu jslintcompressmục tiêu của plugin yuicompressor-maven-plugin

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
    <pluginExecutions>
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>yuicompressor-maven-plugin</artifactId>
                <versionRange>[1.0,)</versionRange>
                <goals>
                    <goal>compress</goal>
                    <goal>jslint</goal>
                </goals>
            </pluginExecutionFilter>
            <action>
                <ignore/>
            </action>
        </pluginExecution>
    </pluginExecutions>
</lifecycleMappingMetadata>

4) Trong trường hợp bạn không thích bất kỳ tùy chọn nào trong 3 tùy chọn này, bạn có thể sử dụng trình kết nối m2e (tiện ích mở rộng) cho plugin maven. Trình kết nối sẽ lần lượt cung cấp siêu dữ liệu cho m2e. Bạn có thể xem ví dụ về thông tin siêu dữ liệu trong trình kết nối tại liên kết này . Bạn có thể nhận thấy rằng siêu dữ liệu đề cập đến một cấu hình. Điều này đơn giản có nghĩa là m2e sẽ giao trách nhiệm cho lớp java cụ thể được cung cấp bởi tác giả mở rộng. Trình cấu hình có thể định cấu hình dự án (như nói thêm các thư mục nguồn bổ sung, v.v.) và quyết định có thực thi plugin maven thực tế trong quá trình xây dựng gia tăng không (nếu không được quản lý đúng cách trong cấu hình, nó có thể dẫn đến các bản dựng dự án vô tận)

Tham khảo các liên kết này để biết ví dụ về cấu hình ( link1 , link2 ). Vì vậy, trong trường hợp plugin là thứ có thể được quản lý thông qua trình kết nối bên ngoài thì bạn có thể cài đặt nó. m2e duy trì một danh sách các trình kết nối như vậy được đóng góp bởi các nhà phát triển khác. Đây được gọi là danh mục khám phá. m2e sẽ nhắc bạn cài đặt trình kết nối nếu bạn chưa có bất kỳ siêu dữ liệu ánh xạ vòng đời nào để thực hiện thông qua bất kỳ tùy chọn nào (1-6) và danh mục khám phá có một số tiện ích mở rộng có thể quản lý việc thực thi.

Hình ảnh dưới đây cho thấy cách m2e nhắc bạn cài đặt trình kết nối cho plugin-helper-maven-plugin. cài đặt kết nối được đề xuất từ ​​danh mục khám phá.

5) m2e khuyến khích các tác giả plugin hỗ trợ xây dựng và cung cấp ánh xạ vòng đời trong chính maven-plugin. Điều này có nghĩa là người dùng sẽ không phải sử dụng bất kỳ ánh xạ hoặc trình kết nối vòng đời bổ sung nào. Một số tác giả plugin đã thực hiện điều này

6) Theo mặc định, m2e giữ siêu dữ liệu ánh xạ vòng đời cho hầu hết các plugin được sử dụng phổ biến như maven-Trình biên dịch-plugin và nhiều plugin khác.

Bây giờ trở lại câu hỏi: Có lẽ bạn chỉ có thể cung cấp bỏ qua ánh xạ vòng đời trong 1, 2 hoặc 3 cho mục tiêu cụ thể đó đang tạo ra rắc rối cho bạn.


14

Một cách giải quyết tốt để nhắc nhở bạn rằng m2e có thể được cấu hình tốt hơn, mà không cần dự án thừa hưởng một dấu hiệu lỗi dương tính giả, là chỉ hạ cấp các lỗi đó để cảnh báo:

Cửa sổ -> Tùy chọn -> Maven -> Lỗi / Cảnh báo -> Thực thi plugin không được bao phủ bởi cấu hình vòng đời = Cảnh báo


12

Tôi đã cố gắng thực hiện việc cắm cụ thể ngay sau khi dọn sạch, tức là sau khi làm sạch (mặc định là giai đoạn sạch). Điều này làm việc cho tôi với chàm nhật thực. Chỉ cần thêm hậu kỳ đã giải quyết vấn đề cho tôi.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 

11
Bạn có thể giải thích tại sao điều đó làm việc? Tôi vừa mới thêm vào và đã giải quyết cho tôi, tôi không thực sự tăng niềm tin của mình vào việc không có những hành vi ẩn không mong muốn.
Kissaki

Chắc chắn, tôi có một phasevà một goalcho executionpom.xml đã được trao cho tôi và tôi vẫn gặp lỗi.
rebierpost

Gents - lời xin lỗi của tôi. Tôi không phải là chuyên gia maven, muốn giúp đỡ ai đó tìm kiếm giải pháp nhanh chóng. Tôi nên hv đưa ra cái nhìn sâu sắc hơn mặc dù. Tôi nghĩ mẹo ở đây là bao gồm giai đoạn thực thi. Vì mojo có thể xác định với các giai đoạn thực thi, tôi đã cố gắng thực hiện việc cắm cụ thể ngay sau khi dọn sạch tức là sau khi làm sạch (mặc định là giai đoạn sạch). Điều này làm việc cho tôi với chàm nhật thực. Có lẽ plugin cụ thể có thể đã sử dụng một số phụ thuộc từ pom chính? IIRC đây là plugin dựa trên Vaadin.
Charith De Silva

2

Tôi đã có thể giải quyết vấn đề tương tự với maven-antrun-plugin và jaxb2-maven-plugin trong Eclipse Kepler 4.3 bởi appying giải pháp này: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Vì vậy, nội dung của% của tôi elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-maps-metadata.xml như sau:

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
  <pluginExecutions>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <versionRange>1.3</versionRange>
        <goals>
          <goal>run</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <versionRange>1.2</versionRange>
        <goals>
          <goal>xjc</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
  </pluginExecutions>
</lifecycleMappingMetadata>

* Phải khởi động lại Eclipse để xem các lỗi đã biến mất.


1

Kể từ phiên bản Maven Eclipse (m2e) 0.12, tất cả các mục tiêu vòng đời của Maven phải ánh xạ tới một phần mở rộng m2e đã cài đặt. Trong trường hợp này, maven-ear-pluginmục tiêu đã không được thực hiện default-generate-application-xml.

Bạn có thể loại trừ các mục tiêu vòng đời chưa được ánh xạ bằng cách làm theo các hướng dẫn tại đây:

https://wiki.eclipse.org/M2E_plugin_execut_not_covered

Ngoài ra, chỉ cần nhấp chuột phải vào thông báo lỗi trong Eclipse và chọn Quick Fix-> Ignore for every pom with such errors.

Bạn nên cẩn thận khi bỏ qua các mục tiêu trong vòng đời: thông thường các mục tiêu sẽ làm điều gì đó hữu ích và nếu bạn định cấu hình chúng bị bỏ qua trong Eclipse, bạn có thể bỏ lỡ các bước xây dựng quan trọng. Bạn cũng có thể muốn xem xét thêm hỗ trợ cho phần mở rộng EAR của Maven cho mục tiêu vòng đời chưa được ánh xạ.


0

Với cơ chế được giải thích trong câu trả lời của Jan, tôi đã hướng dẫn cách cắm m2e để bỏ qua mục tiêu "tạo-application-xml". Điều này được loại bỏ lỗi và dường như hoạt động kể từ khi m2e tạo application.xml.

Vì vậy, về cơ bản, lỗi buộc chúng tôi phải quyết định cơ chế nào chịu trách nhiệm tạo tệp applicationDB khi bản dựng Maven chạy bên trong Eclipse dưới sự kiểm soát của plugin m2e. Và chúng tôi đã quyết định rằng m2e phụ trách.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            **<!-- This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <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-ear-plugin</artifactId>
                                    <versionRange>[2.1,)</versionRange>
                                    <goals>
                                        <goal>generate-application-xml</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>**
        </plugins>
    </pluginManagement>
</build>

0

Bạn cần hiểu nội dung trong M2E_plugin_execut_not_covered và làm theo các bước được đề cập dưới đây:

  • Chọn org.eclipse.m2e.lifecyclemicking.defaults jar từ thư mục plugin nhật thực
  • Trích xuất nó và mở vòng đời-ánh xạ-metadata.xml nơi bạn có thể tìm thấy tất cả các pluginExecutions.
  • Thêm pluginExecutions của plugin của bạn được hiển thị là lỗi với các thẻ <ignore/>bên dưới <action>.

ví dụ: đối với lỗi thuộc tính ghi-dự án, hãy thêm đoạn mã này vào <pluginExecutions>phần của tệp vòng đời-ánh xạ-metadata.xml:

 <pluginExecution>
    <pluginExecutionFilter>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>properties-maven-plugin</artifactId>
       <versionRange>1.0-alpha-2</versionRange>
       <goals>
         <goal>write-project-properties</goal>
       </goals>
    </pluginExecutionFilter>
     <action>
       <ignore />
     </action>
   </pluginExecution>
  • Thay thế tệp XML đó trong JAR
  • Thay thế JAR được cập nhật trong thư mục plugin của Eclipse
  • Khởi động lại Eclipse

Bạn sẽ thấy không có lỗi trong tương lai cho bất kỳ dự án.


0

Mặc dù câu hỏi đã quá cũ nhưng tôi muốn chia sẻ giải pháp hiệu quả với tôi vì tôi đã kiểm tra mọi thứ khi gặp lỗi này. Đó là một nỗi đau, tôi đã dành hai ngày cố gắng và cuối cùng, giải pháp là:

cập nhật plugin M2e trong nhật thực

làm sạch và xây dựng lại

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.