Eksekusi plugin tidak tercakup oleh konfigurasi siklus hidup (arketipe JBossas 7 EAR)

123

Saya menggunakan Eclipse 3.7 Indigo dengan Maven M2E Plugin 1.0.100.

Menggunakan arketipe JBoss 7.x JavaEE 6 EAR, pom untuk EAR memberi saya kesalahan ini:

Eksekusi plugin tidak tercakup oleh konfigurasi siklus hidup: org.apache.maven.plugins: maven-ear-plugin: 2.6: generate-application-xml (eksekusi: default-generate-application-xml, phase: generate-resources)

<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>
Oh Chin Boon
sumber

Jawaban:

138

Ini adalah "fitur" dari plugin M2E yang telah diperkenalkan beberapa waktu lalu. Ini tidak terkait langsung dengan plugin JBoss EAR tetapi juga terjadi dengan sebagian besar plugin Maven lainnya.

Jika Anda memiliki eksekusi plugin yang ditentukan di pom(seperti eksekusi maven-ear-plugin:generate-application-xml), Anda juga perlu menambahkan informasi konfigurasi tambahan untuk M2E yang memberi tahu M2E apa yang harus dilakukan ketika build dijalankan di Eclipse, misalnya jika eksekusi plugin diabaikan atau dijalankan oleh M2E, haruskah itu juga dilakukan untuk build inkremental, ... Jika informasi itu hilang, M2E akan mengeluhkannya dengan menampilkan pesan kesalahan ini:

"Eksekusi plugin tidak tercakup oleh konfigurasi siklus proses"

Lihat di sini untuk penjelasan yang lebih detail dan beberapa contoh konfigurasi yang perlu ditambahkan ke pom untuk menghilangkan kesalahan itu:

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

Jan
sumber
70
@Jan Saya tidak mengerti konsepnya. M2E harus transparan bagi pengguna. Lakukan apa yang dilakukan oleh baris perintah Maven, tetapi dari dalam gerhana. Seharusnya tidak ada dalam data konfigurasi pom untuk memberi tahu M2E apa yang harus dilakukan. Jika ya, maka itu desain yang buruk. BTW, kesalahan ini terkadang hilang di versi Eclipse dan M2E yang lebih baru.
rapt
8
Saya setuju dengan rapt. POM saya tidak bergantung pada m2e dan saya ingin menambahkannya sekarang hanya karena saya kebetulan menggunakan Eclipse sebagai IDE saya. Itu adalah tipuan bagi orang lain yang mengerjakan proyek yang sama yang mungkin menggunakan IDE lain seperti IntelliJ. Jika m2e membutuhkan petunjuk ini, maka m2e harus menjadi bagian dari konfigurasi m2e dalam Eclipse.
William
12
Beberapa tujuan tidak masuk akal saat berada di Eclipse. Misalnya, saya memiliki proyek di mana file ZIP diekstrak ke targetfolder. Anda tidak ingin hal itu dilakukan kembali "secara bertahap" setelah menyimpan setiap file sumber. Atau mungkin Anda memang menginginkannya. Sungguh, m2e tidak tahu tentang bangunan spesifik Anda. Anda dapat menyimpan apa yang harus dilakukan m2e di Eclipse, POM, atau mungkin memasang konektor m2e yang menambahkan lebih banyak pengetahuan ke m2e untuk menangani langkah build. Ini adalah opsi yang harus Anda lihat. Saya mengerti Anda tidak ingin membuat POM m2e-aware Anda, tetapi ini adalah tempat yang bagus untuk mengkonfigurasi ini secara terpusat untuk semua devs Anda.
Sander Verhagen
3
Masalahnya adalah bahwa dokumentasi terkait untuk ini, seperti kebanyakan dokumentasi di Maven atau Eclipse. adalah abcacadabra. Tidak peduli seberapa keras mereka mencoba menjelaskannya dengan jelas, penjelasannya bertumpu pada terlalu banyak konsep yang saya sebagai pengguna Maven yang relatif baru tidak mengerti dan tidak tahu bagaimana cara mencari - semua yang saya temukan memiliki masalah yang sama: terlalu banyak yang tidak dapat dijelaskan konsep. Teknologinya terlalu rumit atau dokumentasinya terlalu tidak terorganisir dengan baik. Bagaimanapun, kurva belajarnya tinggi. Jawabannya di sini menambah kejelasan.
reinierpost
10
@RicardoGladwell Anda telah salah memahami tujuan suara negatif. Panah mengatakan "jawaban ini tidak berguna" - dan itu tidak benar untuk jawaban ini. Jadi, meskipun Anda tidak menyukai nada penulisan jawaban ini, suara negatifnya tidak pantas.
Dawood ibn Kareem
43

bagaimanapun sudah terlambat tetapi solusi saya sederhana klik kanan pada pesan kesalahan di Eclipse dan pilih Perbaiki Cepat >> Abaikan untuk setiap pom dengan kesalahan seperti itu

java_newbie
sumber
3
Tidak terlalu terlambat. Saya baru saja memperbaiki masalah dengan cara ini!
reinierpost
2
Saya juga. Semua penelitian ini dan mencoba memahami apa masalahnya membuat saya pusing, jadi saya mengabaikannya :) Terima kasih.
dleerob
1
Ini berhasil untuk saya. Saya menduga itu secara otomatis menghasilkan apa yang dijelaskan oleh jawaban @ Jan yang mengarah ke eclipse.org/m2e/documentation/m2e-execution-not-covered.html karena satu-satunya perubahan yang saya lihat setelah saya menerima perbaikan cepat adalah perubahan pada pom saya. xml.
Michael Osofsky
Saya mencoba lagi di komputer lain dan masalahnya hilang ketika saya memutakhirkan dari JBehave 3.9.4 ke 3.9.5 karena itu adalah plugin JBehave, dalam kasus saya, yang membuat kesalahan (saya telah membuat konfigurasi plugin dari arketipe JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
Michael Osofsky
30

Eclipse memiliki konsep incremental builds. Ini sangat berguna karena menghemat banyak waktu.

Bagaimana ini Berguna

Katakanlah Anda baru saja mengubah satu file .java. Pembangun inkremental akan dapat mengkompilasi kode tanpa harus mengkompilasi ulang semuanya (yang akan memakan waktu lebih lama).

Sekarang apa masalahnya dengan Plugin Maven

Sebagian besar plugin maven tidak dirancang untuk build tambahan dan karenanya menimbulkan masalah bagi m2e. m2e tidak tahu apakah tujuan plugin adalah sesuatu yang penting atau tidak relevan. Jika itu hanya mengeksekusi setiap plugin ketika satu file berubah, itu akan memakan banyak waktu.

Inilah alasan mengapa m2e bergantung pada informasi metadata untuk mengetahui bagaimana eksekusi harus ditangani. m2e telah memberikan opsi berbeda untuk memberikan informasi metadata ini dan urutan preferensi adalah seperti di bawah ini (tertinggi ke terendah)

  1. pom.xml proyek
  2. orang tua, kakek-nenek dan seterusnya file pom.xml
  3. Preferensi ruang kerja [m2e 1.2+]
  4. memasang ekstensi m2e
  5. [m2e 1.1+] metadata pemetaan siklus hidup yang disediakan oleh plugin maven
  6. metadata pemetaan siklus hidup default dikirimkan dengan m2e

1,2 mengacu pada bagian pluginManagement yang menentukan di tag file pom Anda atau orang tuanya. M2E membaca konfigurasi ini untuk mengkonfigurasi proyek. Potongan di bawah menginstruksikan m2e untuk mengabaikan jslintdan compresstujuan 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) Jika Anda tidak suka mencemari file pom Anda dengan metadata ini, Anda dapat menyimpannya dalam file XML eksternal (opsi 3). Di bawah ini adalah contoh file pemetaan yang menginstruksikan m2e untuk mengabaikan jslintdan compresstujuan 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) Jika Anda tidak menyukai salah satu dari 3 opsi ini, Anda dapat menggunakan konektor m2e (ekstensi) untuk plugin maven. Konektor pada gilirannya akan memberikan metadata ke m2e. Anda dapat melihat contoh informasi metadata dalam konektor di link ini . Anda mungkin telah memperhatikan bahwa metadata mengacu pada konfigurator. Ini berarti m2e akan mendelegasikan tanggung jawab ke kelas java tertentu yang disediakan oleh pembuat ekstensi. Konfigurator dapat mengkonfigurasi proyek (seperti misalnya menambahkan folder sumber tambahan dll) dan memutuskan apakah akan mengeksekusi plugin maven yang sebenarnya selama build tambahan (jika tidak dikelola dengan benar dalam konfigurator, ini dapat menyebabkan pembangunan proyek tanpa akhir)

Lihat link berikut untuk contoh konfigurator ( link1 , link2 ). Jadi jika plugin adalah sesuatu yang dapat dikelola melalui konektor eksternal, maka Anda dapat menginstalnya. m2e menyimpan daftar konektor semacam itu yang dikontribusikan oleh pengembang lain. Ini dikenal sebagai katalog penemuan. m2e akan meminta Anda untuk memasang konektor jika Anda belum memiliki metadata pemetaan siklus hidup untuk eksekusi melalui salah satu opsi (1-6) dan katalog penemuan memiliki beberapa ekstensi yang dapat mengelola eksekusi.

Gambar di bawah ini menunjukkan bagaimana m2e meminta Anda menginstal konektor untuk plugin build-helper-maven. pasang konektor yang disarankan dari katalog penemuan.

5) m2e mendorong pembuat plugin untuk mendukung incremental build dan menyediakan pemetaan siklus hidup di dalam maven-plugin itu sendiri. Ini berarti bahwa pengguna tidak perlu menggunakan pemetaan atau konektor siklus hidup tambahan. Beberapa penulis plugin telah menerapkan ini

6) Secara default m2e menyimpan metadata pemetaan siklus hidup untuk sebagian besar plugin yang umum digunakan seperti maven-compiler-plugin dan banyak lainnya.

Sekarang kembali ke pertanyaan: Anda mungkin dapat memberikan pemetaan siklus hidup abaikan dalam 1, 2 atau 3 untuk tujuan spesifik yang menimbulkan masalah bagi Anda.

coderplus
sumber
14

Solusi yang baik untuk mengingatkan Anda bahwa m2e dapat dikonfigurasi dengan lebih baik, tanpa proyek yang mewarisi penanda kesalahan positif palsu, adalah dengan menurunkan versi kesalahan tersebut ke peringatan:

Jendela -> Preferensi -> Maven -> Kesalahan / Peringatan -> Eksekusi plugin tidak tercakup oleh konfigurasi siklus hidup = Peringatan

mgobeil.dll
sumber
12

Saya mencoba menjalankan penyumbatan khusus setelah pembersihan yaitu pasca-bersih (default adalah fase bersih). Ini berhasil untuk saya dengan eclipse indigo. Baru saja menambahkan pasca-pembersihan menyelesaikan masalah bagi saya.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
Charith De Silva
sumber
11
Bisakah Anda menjelaskan mengapa itu berhasil? "Baru saja menambahkan" dan "memutuskan untuk saya" tidak benar-benar meningkatkan kepercayaan saya karena tidak adanya perilaku tersembunyi yang tidak diinginkan.
Kissaki
Benar saja, saya memiliki phasedan goaluntuk executiondi pom.xml yang diberikan kepada saya, dan saya masih mendapatkan kesalahan.
reinierpost
Tuan-tuan - maafkan saya. Saya bukan ahli ahli, ingin membantu seseorang mencari solusi cepat. Tapi aku harus diberi lebih banyak wawasan. Saya pikir triknya di sini adalah masuknya fase eksekusi. Karena mojo dapat didefinisikan dengan tahapan eksekusi, saya mencoba untuk mengeksekusi penyumbatan tertentu setelah pembersihan yaitu pasca-bersih (default adalah tahap bersih). Ini berhasil untuk saya dengan eclipse indigo. Mungkin plugin tertentu mungkin telah menggunakan beberapa dependensi dari pom utama? IIRC ini adalah plugin berbasis Vaadin.
Charith De Silva
2

Saya dapat menyelesaikan masalah yang sama dengan maven-antrun-plugin dan jaxb2-maven-plugin di Eclipse Kepler 4.3 dengan menerapkan solusi ini: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Jadi konten% saya elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml adalah sebagai berikut:

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

* Harus memulai ulang Eclipse untuk melihat kesalahan hilang.

eros
sumber
1

Mulai Maven Eclipse (m2e) versi 0.12, semua tujuan siklus hidup Maven harus dipetakan ke ekstensi m2e yang terpasang. Dalam hal ini, tujuan maven-ear-pluginmemiliki tujuan yang belum dipetakan default-generate-application-xml.

Anda dapat mengecualikan tujuan siklus hidup yang tidak dipetakan hanya dengan mengikuti petunjuk di sini:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

Atau, cukup klik kanan pada pesan kesalahan di Eclipse dan pilih Quick Fix-> Ignore for every pom with such errors.

Anda harus berhati-hati saat mengabaikan tujuan siklus hidup: biasanya tujuan melakukan sesuatu yang berguna dan jika Anda mengonfigurasinya untuk diabaikan di Eclipse, Anda mungkin melewatkan langkah-langkah pembuatan yang penting. Anda mungkin juga ingin mempertimbangkan untuk menambahkan dukungan ke ekstensi Maven Eclipse EAR untuk tujuan siklus hidup yang belum dipetakan.

Ricardo Gladwell
sumber
0

Dengan mekanisme yang dijelaskan dalam jawaban Jan, saya telah menginstruksikan m2e pluging untuk mengabaikan tujuan "generate-application-xml". Ini menghilangkan kesalahan dan tampaknya berfungsi sejak m2e membuat application.xml.

Jadi pada dasarnya error tersebut memaksa kita untuk memutuskan mekanisme mana yang bertanggung jawab untuk menghasilkan application.xml ketika build Maven berjalan di dalam Eclipse di bawah kendali plugin m2e. Dan kami telah memutuskan bahwa m2e yang bertanggung jawab.

<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>
StaticNoiseLog
sumber
0

Anda perlu memahami konten di M2E_plugin_execution_not_covered dan ikuti langkah-langkah yang disebutkan di bawah ini:

  • Pilih jar org.eclipse.m2e.lifecyclemapping.defaults dari folder plugin eclipse
  • Ekstrak dan buka lifecycle-mapping-metadata.xml tempat Anda dapat menemukan semua pluginExecutions.
  • Tambahkan pluginExecutions dari plugin Anda yang ditampilkan sebagai kesalahan dengan tag di <ignore/>bawah <action>.

misalnya: untuk kesalahan tulis-proyek-properti, tambahkan cuplikan ini di bawah <pluginExecutions>bagian file lifecycle-mapping-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>
  • Ganti file XML itu di JAR
  • Ganti JAR yang diperbarui di folder plugin Eclipse
  • Mulai ulang Eclipse

Anda seharusnya tidak melihat kesalahan di masa mendatang untuk proyek apa pun.

gowtham
sumber
0

Meskipun pertanyaannya terlalu lama, tetapi saya ingin membagikan solusi yang berhasil untuk saya karena saya sudah memeriksa semuanya terkait kesalahan ini. Itu menyakitkan, saya menghabiskan dua hari mencoba dan pada akhirnya solusinya adalah:

perbarui plugin M2e di eclipse

bersihkan dan bangun kembali

William Kinaan
sumber