maven-dependency-plugin (tujuan "copy-dependensi", "membongkar") tidak didukung oleh m2e

155

Saya punya proyek Maven yang cukup sederhana:

<project>
    <dependencies>
        ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
                        </configuration>    
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Namun, saya mendapatkan kesalahan berikut dalam m2eclipse:

Description Resource    Path    Location    Type
maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e. pom.xml  /jasperreports-test line 60 Maven Project Build Lifecycle Mapping Problem

Mengapa saya peduli jika m2eclipse tidak "mendukung" tugas ini? Maven, dan hanya itu yang benar-benar kupedulikan. Bagaimana saya bisa mendapatkan kesalahan ini dalam proyek saya untuk pergi?

Naftuli Kay
sumber
4
M2e hari-hari ini menyediakan perbaikan cepat untuk menambahkan konfigurasi yang sesuai ke pom.xml Anda untuk membuat m2e mengabaikan tujuan yang tidak didukung.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen, apa perbaikan cepatnya?
Muhammad Gelbana
1
@MuhammadGelbana Dalam Eclipse "perbaikan cepat" berarti: letakkan kursor pada masalah; tekan Ctrl-1; Pilih Perbaikan Cepat.
Thorbjørn Ravn Andersen

Jawaban:

164

Tampaknya menjadi masalah yang diketahui. Anda dapat memerintahkan m2e untuk mengabaikan ini.

Opsi 1: pom.xml

Tambahkan yang berikut di dalam <build/>tag Anda :

<pluginManagement>
<plugins>
    <!-- Ignore/Execute plugin execution -->
    <plugin>
        <groupId>org.eclipse.m2e</groupId>
        <artifactId>lifecycle-mapping</artifactId>
        <version>1.0.0</version>
        <configuration>
            <lifecycleMappingMetadata>
                <pluginExecutions>
                    <!-- copy-dependency plugin -->
                    <pluginExecution>
                        <pluginExecutionFilter>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-dependency-plugin</artifactId>
                            <versionRange>[1.0.0,)</versionRange>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                        </pluginExecutionFilter>
                        <action>
                            <ignore />
                        </action>
                    </pluginExecution>
                </pluginExecutions>
            </lifecycleMappingMetadata>
        </configuration>
    </plugin>
   </plugins></pluginManagement>

Anda harus melakukan Maven ... -> Perbarui Konfigurasi Proyek pada proyek Anda setelah ini.

Baca selengkapnya: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Opsi 2: Global Eclipse Override

Untuk menghindari mengubah file POM Anda, abaikan mengabaikan dapat diterapkan ke seluruh ruang kerja melalui pengaturan Eclipse.

Simpan file ini di suatu tempat di disk: https://gist.github.com/maksimov/8906462

Di Eclipse/Preferences/Maven/Lifecycle Mappingsbrowse ke file ini dan klik OK:

Pengaturan Eclipse

maksimov
sumber
10
Bagaimana jika dependensi salinan adalah langkah penting dalam membangun file WAR Anda? Saya bekerja dengan monstrosity panggilan m2Eclipse dan bahkan jika mengubah tindakan untuk mengeksekusi, file-file penting tidak disalin ke folder target ...
bartv
1
Untuk pengaturan pengabaian yang dibuat secara otomatis, @PhoneTech, m2e menambahkan komentar "Konfigurasi plugin ini digunakan untuk menyimpan pengaturan Eclipse m2e saja. Tidak memiliki pengaruh pada pembuatan Maven itu sendiri." Tidak yakin apa artinya itu, karena Anda mengatakan hal-hal tidak disalin untuk Anda.
Arjan
6
Ya, itu membantu ... tapi itu banyak sekali kode untuk menghilangkan peringatan: P
dokaspar 8'13
Ini masih memberi saya peringatan, tetapi kesalahan sudah hilang.
stevecross
57

Ini adalah masalah M2E untuk eksekusi plugin Eclipse M2E yang tidak tercakup .

Untuk mengatasi masalah ini, yang harus Anda lakukan adalah memetakan siklus hidup yang tidak dikenali dan memerintahkan M2E untuk menjalankannya.

Anda harus menambahkan ini setelah Anda plugins, di dalam build. Ini akan menghapus kesalahan dan membuat M2E mengenali tujuan copy-depenciesdari maven-dependency-plugindan membuat pekerjaan POM seperti yang diharapkan, menyalin dependensi ke folder setiap kali Eclipse membangun itu. Jika Anda hanya ingin mengabaikan kesalahan, maka Anda mengubah <execute />untuk <ignore />. Tidak perlu menyertakan maven-dependency-pluginke dalam pluginManagement, seperti yang disarankan sebelumnya.

<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-dependency-plugin</artifactId>
                <versionRange>[2.0,)</versionRange>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
              </pluginExecutionFilter>
              <action>
                <execute />
              </action>
            </pluginExecution>
          </pluginExecutions>
        </lifecycleMappingMetadata>
      </configuration>
    </plugin>
  </plugins>
</pluginManagement>
Caio Cunha
sumber
4
Ini memang memecahkannya. Dan saya menjadi bodoh, berpikir ketika orang-orang berbicara tentang pindah <plugins>ke yang <pluginManagement>benar-benar harus pindah ke <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>sana. Tapi ini tentang <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>yang perlu dimasukkan <pluginManagement>. Saat menggunakan Perbaikan Cepat di Eclipse, hal yang sama ditambahkan di atas biasa<plugins> , dan tampaknya lokasi berfungsi dengan baik juga. Kuncinya adalah kemudian berubah <ignore>menjadi <execute>. Bagus.
Arjan
1
Ditemukan saya membutuhkan <runOnIncremental> false </runOnIncremental> dalam eksekusi seperti yang direkomendasikan pada tautan yang Anda berikan. Terima kasih atas jawabannya buat saya di jalan yang benar.
biksu siber
Tidak perlu menambahkan ini SETELAH Anda pluginsdi dalam build, Anda dapat menambahkan ini sebelumnya.
Fagner Brack
38

Jika salin-dependensi, membongkar, mengemas, dll., Penting untuk proyek Anda Anda tidak harus mengabaikannya. Anda harus melampirkan Anda <plugins>di <pluginManagement>diuji dengan Eclipse Indigo SR1, maven 2.2.1

pengguna311174
sumber
4
Terima kasih, ini juga membantu dalam Eclipse Indigo SR2
stemm
1
Saya agak bingung ... Apakah itu berarti menggunakan kode di atas tetapi dengan <execute />bukannya <ignore />? Terima kasih!
xverges
1
Mau jelaskan sedikit lagi? Hanya menempatkan <plugin>ke dalam <pluginManagement>tapi masih referensi untuk melakukan tugasnya, masih memberi saya peringatan yang sama.
Arjan
@CoToOn, mungkin Anda tahu lebih banyak lagi ...? Setelah menambahkannya ke <pluginManagement>saya masih perlu menambahkan 2 baris "biasa" <build><plugins><plugin>...juga, referensi yang sudah dikonfigurasi <pluginManagement>, kan? (Masih melihat Juno mengeluh tentang hal yang sama, ketika masuk <pluginManagement>.)
Arjan
@Arjan Anda harus menyertakan pluginstag Anda pluginManagement. Tapi lihat jawaban yang saya berikan di bawah ini, stackoverflow.com/a/12109018/179138 . Yang disarankan mengabaikan eksekusi, tetapi jangan menjalankan plugin di Eclipse.
Caio Cunha
16

Untuk membuatnya berfungsi, alih-alih mengabaikannya, Anda dapat menginstal konektor m2e untuk maven-dependency-plugin:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Inilah cara Anda melakukannya di Eclipse:

  1. pergi ke Jendela / Preferensi / Maven / Penemuan /
  2. masukkan URL Katalog: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. klik Buka Katalog
  4. pilih m2e-maven-dependency-plugin
  5. Nikmati
mario
sumber
1
+1 untuk jawaban KANAN. Hanya ingat, lakukan edit kecil pada pom.xmlfile setelah menginstal plugin, jika tidak kesalahan tidak akan hilang.
Fagner Brack
Dalam Eclipse Luna URL Katalog adalah download.eclipse.org/technology/m2e/discovery/directory-1.5.xml
jansohn
Saya mencoba ini tetapi bidang URL Katalog tidak dapat diedit! Milik saya diatur ke: download.eclipse.org/technology/m2e/discovery/directory.xml (yaitu tanpa -1.4) di akhir. Ada ide, bagaimana / di mana orang bisa menyesuaikan itu?
mmo
8

Terlepas dari jawaban dari CaioToOn di atas, saya masih memiliki masalah dalam menjalankannya pada awalnya.

Setelah beberapa upaya, akhirnya berhasil. Saya menempelkan versi terakhir saya di sini - berharap itu akan bermanfaat bagi orang lain.

    <build> 
        <plugins>
            <!--
            Copy all Maven Dependencies (-MD) into libMD/ folder to use in classpath via shellscript
             --> 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/libMD</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <!--  
        Above maven-dependepcy-plugin gives a validation error in m2e. 
        To fix that, add the plugin management step below. Per: http://stackoverflow.com/a/12109018
        -->
        <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-dependency-plugin</artifactId>
                                        <versionRange>[2.0,)</versionRange>
                                        <goals>
                                            <goal>copy-dependencies</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
SGB
sumber
Bisakah Anda berikan dengan tujuan untuk dieksekusi di gerhana?
Jess
1

Saya memiliki masalah yang sama ketika mencoba memuat proyek Hadoop dalam gerhana. Saya mencoba solusi di atas, dan saya percaya itu mungkin berhasil di Eclipse Kepler ... bahkan tidak yakin lagi (mencoba terlalu banyak hal).

Dengan semua masalah yang saya alami, saya memutuskan untuk pindah ke Eclipse Luna, dan solusi di atas tidak bekerja untuk saya.

Ada pos lain yang merekomendasikan untuk mengubah tag ... ke paket. Saya mulai melakukan itu, dan itu akan "menghapus" kesalahan ... Namun, saya mulai berpikir bahwa perubahan itu akan menggigit saya nanti - saya bukan pakar Maven.

Untungnya, saya menemukan cara menghapus semua kesalahan. Pergi ke Window-> Preferences-> Maven-> Error / Warnings dan ubah "Eksekusi plugin tidak tercakup oleh siklus hidup ..." pilihan untuk "Abaikan". Semoga ini bisa membantu.

Myluco
sumber
0

Saya tahu ini adalah posting lama tapi saya juga kesulitan dengan masalah ini dan saya menggunakan template dari halaman ini: http://maven.apache.org/plugins/maven-dependency-plugin/usage.html

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.7</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>[ groupId ]</groupId>
                  <artifactId>[ artifactId ]</artifactId>
                  <version>[ version ]</version>
                  <type>[ packaging ]</type>
                  <classifier> [classifier - optional] </classifier>
                  <overWrite>[ true or false ]</overWrite>
                  <outputDirectory>[ output directory ]</outputDirectory>
                  <destFileName>[ filename ]</destFileName>
                </artifactItem>
              </artifactItems>
              <!-- other configurations here -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

dan semuanya bekerja dengan baik di bawah m2e1.3.1.

Ketika saya mencoba menggunakan

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
                    </configuration>    
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Saya juga mendapat m2ekesalahan.

Andna
sumber
Ya, inilah tepatnya tujuan dari entri ini: m2e sekarang membutuhkan konektor untuk memetakan eksekusi plugin di Eclipse build lifecycle. <br/> Bahkan pada saat penulisan komentar saya, m2e hanya mendukung beberapa konektor: Anda harus menggunakan lifecycle-mappingplugin Maven untuk menginstruksikan m2e bagaimana menangani plugin yang tidak didukung (di sini maven-dependency-plugin)
Olivier B.
0

Pilihan lain adalah menavigasi ke tab masalah, klik kanan pada kesalahan, klik terapkan perbaikan cepat. Seharusnya menghasilkan kode abaikan xml dan menerapkannya .pom file untuk Anda.

langit biru
sumber