maven-bağımlılık-eklentisi (“kopya bağımlılıkları”, “paketi aç” hedefleri) m2e tarafından desteklenmez


155

Oldukça basit bir Maven projem var:

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

Ancak, m2eclipse içinde aşağıdaki hatayı alıyorum:

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

M2eclipse bu görevi "desteklemiyorsa" neden umrumda? Maven öyle yapar ve gerçekten önemsediğim budur. Projemdeki bu hatayı ortadan kaldırmak için nasıl alabilirim?


4
Günümüzde m2e, m2e'nin desteklenmeyen hedefi yok sayması için pom.xml dosyasına uygun yapılandırmayı eklemek için bir hızlı düzeltme sağlar.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen, hızlı düzeltme nedir?
Muhammed Gelbana

1
@MuhammadGelbana Eclipse'de "hızlı düzeltme" şu anlama gelir: imleci soruna getir; Ctrl-1'e basın; Hızlı Onarım'ı seçin.
Thorbjørn Ravn Andersen

Yanıtlar:


164

Bilinen bir sorun gibi görünüyor. M2e'ye bunu görmezden gelmesini söyleyebilirsiniz.

Seçenek 1: pom.xml

<build/>Etiketinizin içine aşağıdakileri ekleyin :

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

Bundan sonra Projenizde Maven ... -> Güncelleme Proje Yapılandırması yapmanız gerekecektir.

Daha fazla bilgi için: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Seçenek 2: Global Eclipse Override

POM dosyalarınızı değiştirmekten kaçınmak için yoksay geçersiz kılma, Eclipse ayarları aracılığıyla tüm çalışma alanına uygulanabilir.

Bu dosyayı diskte bir yere kaydedin: https://gist.github.com/maksimov/8906462

Gelen Eclipse/Preferences/Maven/Lifecycle MappingsTamam tıklayın ve bu dosyaya göz atma:

Eclipse Ayarları


10
Kopya bağımlılıkları WAR dosyanızı oluştururken hayati bir adımsa ne olur? Ben m2Eclipse çağrısı canavarlık ile çalışıyorum ve yürütmek için eylem değiştirseniz bile, hayati dosyalar hedef klasöre kopyalanmaz ...
bartv

1
Otomatik oluşturulan yoksayma ayarları @PhoneTech için m2e, "Bu eklentinin yapılandırması yalnızca Eclipse m2e ayarlarını saklamak için kullanılır. Maven derlemesinin kendisi üzerinde hiçbir etkisi yoktur." Bunun ne anlama geldiğinden emin değilim, çünkü şeylerin sizin için kopyalanmadığını söylüyorsunuz.
Arjan

6
Evet, yardımcı oldu ... ama bir uyarıdan kurtulmak için çok fazla kod var: P
dokaspar

Bu hala bana bir uyarı veriyor, ancak hata gitti.
stevecross

57

Bu, Eclipse M2E eklentisi yürütmesi için M2E'nin bir sorunudur .

Bu sorunu çözmek için tek yapmanız gereken, tanımadığı yaşam döngüsünü haritalamak ve M2E'ye onu yürütmesi talimatını vermektir.

Bunu sizden sonra plugins, içine eklemelisiniz build. Bu hatayı ortadan kaldırmak ve M2E golü tanımak yapacak copy-depenciesait maven-dependency-pluginher seferinde Eclipse build it klasör bağımlılıkları kopyalama ve beklendiği gibi POM çalışması. Sadece hatayı yoksaymak istiyorsanız, <execute />için değiştirin <ignore />. Daha önce önerildiği gibi maven-dependency-pluginiçine yerleştirmenize gerek yoktur pluginManagement.

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

4
Bu gerçekten çözer. Ve insanlar hareketli konudan bahsetmek ne düşünerek aptal ediliyordu <plugins>içine <pluginManagement>aslında hareket etmelidir birinde <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>içeride. Ama <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>içine alınması gereken şeyle ilgili <pluginManagement>. Eclipse Hızlı Fix kullanırken, aynı eklenir yukarıda düzenli <plugins>ve o konum çok iyi çalışır görünüyor. Anahtar değişime daha sonra <ignore>içine <execute>. Güzel.
Arjan

1
Sağladığınız bağlantıda önerildiği gibi yürütme içinde <runOnIncremental> false </runOnIncremental> gerekli buldum. Cevap için teşekkürler beni doğru yola koydu.
cyber-monk

Bunu pluginsiçinizden SONRA eklemenize gerek yoktur build, daha önce ekleyebilirsiniz.
Fagner Brack

38

Kopya bağımlılıkları, paketten çıkarma, paket vb. Projeniz için önemliyse, görmezden gelmemelisiniz. Eğer kapsamak zorunda <plugins>içinde <pluginManagement>2.2.1 maven Eclipse Indigo SR1 ile test


4
Teşekkürler, aynı zamanda Eclipse Indigo SR2
stemm

1
Biraz kayboldum ... Bu yukarıdaki kodu kullanmak anlamına gelir ama <execute />yerine <ignore />? Teşekkürler!
xverges

1
Biraz daha açıklamak ister misiniz? Sadece bir koyarak <plugin>içine <pluginManagement>ama yine yine bana aynı uyarı verir, onun işi yapmak için başvuran.
Arjan

@CaioToOn, belki biraz daha biliyorsun ...? Ekledikten sonra <pluginManagement>hala "normal" bir 2 satır eklemem gerekiyor <build><plugins><plugin>..., yapılandırılmış olana atıfta bulunarak <pluginManagement>, değil mi? (Juno'yu görmeye devam ederken aynı şeyden şikayet ediyor <pluginManagement>.)
Arjan

@Arjan pluginsetiketinizi içine almalısınız pluginManagement. Ancak aşağıda verdiğim yanıta bir göz atın, stackoverflow.com/a/12109018/179138 . Önerileni yürütmeyi yoksayar, ancak Eclipse'de eklentiyi yürütmeyin.
Caio Cunha

16

Çalışmasını sağlamak için, yoksaymak yerine, maven-bağımlılık eklentisi için m2e konektörünü kurabilirsiniz:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Eclipse'de bunu nasıl yapacağınız aşağıda açıklanmıştır:

  1. Pencere / Tercihler / Maven / Keşif /
  2. Katalog URL'sini girin: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. Kataloğu Aç'ı tıklayın
  4. m2e-maven-bağımlılık-eklentisini seçin
  5. zevk almak

1
DOĞRU cevap için +1. pom.xmlEklentiyi yükledikten sonra dosyada küçük bir düzenleme yapmayı unutmayın , aksi takdirde hata ortadan kalkmayabilir.
Fagner Brack


Bunu denedim ama Katalog URL alanları düzenlenebilir değil! Benimki sonunda : download.eclipse.org/technology/m2e/discovery/directory.xml (yani -1.4 olmadan) olarak ayarlandı . Herhangi bir fikir, nasıl / nerede ayarlayabilirim?
mmo

8

Yukarıdaki CaioToOn'un cevabına rağmen, bunun başlangıçta çalışmasını sağlamakta hala sorunlar yaşadım.

Birden fazla denemeden sonra, sonunda işe yaradı. Son versiyonumu buraya yapıştırıyorum - başka birine fayda sağlayacağını umuyorum.

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

Tutulmada yürütme hedefi sağlayabilir misiniz?
Jess

1

Tutulmada Hadoop projesini yüklemeye çalışırken aynı problemi yaşadım. Yukarıdaki çözümleri denedim ve Eclipse Kepler'de çalışmış olabileceğine inanıyorum ... artık emin değilim (çok fazla şey denedim).

Yaşadığım tüm problemlerle Eclipse Luna'ya geçmeye karar verdim ve yukarıdaki çözümler benim için işe yaramadı.

... etiketinin pakete değiştirilmesini öneren başka bir yayın daha vardı. Bunu yapmaya başladım ve hataları "temizleyecekti ..." Ancak, değişikliklerin beni daha sonra ısıracağını düşünmeye başladım - Maven'de uzman değilim.

Neyse ki, tüm hataları nasıl kaldıracağımı öğrendim. Pencere-> Tercihler-> Maven-> Hata / Uyarılar'a gidin ve "Eklenti yürütme, yaşam döngüsü kapsamında değil ..." seçeneğini "Yoksay" olarak değiştirin. Umarım yardımcı olur.


0

Bu eski yazı olduğunu biliyorum ama bugün bu sorunla da mücadele ettim ve bu sayfadan şablon kullandım: 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>

ve m2e1.3.1 altında her şey yolunda gidiyor.

Kullanmaya çalıştığımda

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

Ayrıca m2ehata aldım .


Evet, bu tam olarak bu girişin amacıdır: m2e artık Eclipse derleme yaşam döngüsünde eklenti yürütmelerini eşleştirmek için konektörlere ihtiyaç duyuyor . <br/> Yorum yazarken bile m2e sadece birkaç konektörü destekliyor: lifecycle-mappingm2e'ye desteklenmeyen bir eklenti (burada maven-dependency-plugin) ile nasıl başa çıkılacağını öğretmek için Maven eklentisini kullanmanız gerekiyor
Olivier B.

0

Başka bir seçenek, sorunlar sekmesine gitmek, hatayı sağ tıklamak, hızlı düzeltmeyi uygulamaktır. Yoksay xml kodunu oluşturmalı ve sizin için .pom dosyasını uygulamalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.