maven-dependency-plugin (เป้าหมาย“ copy-dependencies”,“ unpack”) ไม่รองรับ m2e


155

ฉันมีโครงการ Maven ค่อนข้างง่าย:

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

อย่างไรก็ตามฉันได้รับข้อผิดพลาดต่อไปนี้ใน 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

ทำไมฉันถึงสนใจว่า m2eclipse ไม่ได้ "สนับสนุน" ภารกิจนี้หรือไม่? Maven ทำและนั่นคือทั้งหมดที่ฉันสนใจจริงๆ ฉันจะได้รับข้อผิดพลาดนี้ในโครงการของฉันได้อย่างไร


4
วันนี้ m2e จัดเตรียมคำแนะนำด่วนเพื่อเพิ่มการกำหนดค่าที่เหมาะสมใน pom.xml ของคุณเพื่อให้ m2e เพิกเฉยต่อเป้าหมายที่ไม่สนับสนุน
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersenการแก้ไขด่วนคืออะไร
Muhammad Gelbana

1
@MuhammadGelbana ใน Eclipse "การแก้ไขด่วน" หมายถึง: วางเคอร์เซอร์บนปัญหา; กด Ctrl-1; เลือกการแก้ไขด่วน
Thorbjørn Ravn Andersen

คำตอบ:


164

ดูเหมือนจะเป็นปัญหาที่ทราบแล้ว คุณสามารถสั่งให้ m2e เพิกเฉยต่อสิ่งนี้ได้

ตัวเลือก 1: pom.xml

เพิ่มสิ่งต่อไปนี้ภายใน<build/>แท็กของคุณ:

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

คุณจะต้องทำ Maven ... -> อัปเดตการกำหนดค่าโครงการในโครงการของคุณหลังจากนี้

อ่านเพิ่มเติม: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

ตัวเลือก 2: Global Eclipse Override

เพื่อหลีกเลี่ยงการเปลี่ยนแปลงไฟล์ POM ของคุณการแทนที่การข้ามสามารถใช้กับพื้นที่ทำงานทั้งหมดผ่านการตั้งค่า Eclipse

บันทึกไฟล์นี้ไว้บนดิสก์: https://gist.github.com/maksimov/8906462

ในการEclipse/Preferences/Maven/Lifecycle Mappingsเรียกดูไฟล์นี้และคลิกตกลง:

การตั้งค่า Eclipse


10
จะเป็นอย่างไรถ้าการพึ่งพาการทำสำเนาเป็นขั้นตอนสำคัญในการสร้างไฟล์ WAR ของคุณ ฉันทำงานกับโทร m2Eclipse ที่น่าประหลาดใจและถึงแม้ว่าจะเปลี่ยนการกระทำเพื่อดำเนินการไฟล์สำคัญจะไม่ถูกคัดลอกไปยังโฟลเดอร์เป้าหมาย ...
bartv

1
สำหรับการตั้งค่าการเพิกเฉยที่สร้างโดยอัตโนมัติ @PhoneTech, m2e จะเพิ่มความคิดเห็น"การกำหนดค่าปลั๊กอินนี้ใช้เพื่อเก็บการตั้งค่า Eclipse m2e เท่านั้นไม่มีผลกับ Maven build เอง" ไม่แน่ใจว่ามีความหมายเช่นไรเนื่องจากคุณกำลังพูดว่าสิ่งต่าง ๆ ไม่ได้ถูกคัดลอกมาให้คุณ
Arjan

6
ใช่มันช่วย ... แต่นั่นเป็นรหัสที่น่าสะพรึงกลัวมากเพียงแค่กำจัดคำเตือน: P
dokaspar

สิ่งนี้ยังคงเตือนฉัน แต่ข้อผิดพลาดหายไป
สตีฟครอส

57

นี่เป็นปัญหาของ M2E สำหรับการดำเนินการปลั๊กอิน Eclipse M2E ที่ไม่ครอบคลุมไม่ครอบคลุม

เพื่อแก้ปัญหานี้สิ่งที่คุณต้องทำคือการแมปวงจรชีวิตที่ไม่รู้จักและสั่งให้ M2E เรียกใช้งาน

คุณควรเพิ่มนี้หลังจากที่คุณภายในplugins buildนี้จะลบข้อผิดพลาดและทำให้ M2E ตระหนักถึงเป้าหมายcopy-depenciesของmaven-dependency-pluginและทำให้การทำงานของ POM ตามที่คาดไว้, การคัดลอกการอ้างอิงไปยังโฟลเดอร์ทุกครั้ง Eclipse สร้างมัน หากคุณเพียงต้องการละเว้นข้อผิดพลาดแล้วคุณจะเปลี่ยน<execute /><ignore />สำหรับ ไม่จำเป็นต้องล้อมรอบของคุณmaven-dependency-pluginเป็น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
มันแก้ปัญหาได้แน่นอน และฉันเป็นคนโง่คิดว่าเมื่อมีคนพูดถึงเรื่องการย้าย<plugins>เข้ามา<pluginManagement>ควรจะเข้าไปข้าง<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>ใน แต่มันเป็นเรื่องเกี่ยวกับการที่จะต้องอยู่ใน<groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <pluginManagement>เมื่อใช้ Quick Fix ใน Eclipse จะมีการเพิ่มค่าเดียวกันเหนือปกติ<plugins>และดูเหมือนว่าตำแหน่งจะทำงานได้ดีเช่นกัน ที่สำคัญคือแล้วจะเปลี่ยนเข้าสู่<ignore> <execute>ดี
Arjan

1
พบว่าฉันต้องการ <runOnIncremental> false </runOnIncremental> ภายในเอ็กซีคิวต์ตามที่แนะนำในลิงก์ที่คุณให้ไว้ ขอบคุณสำหรับคำตอบตั้งฉันบนเส้นทางที่ถูกต้อง
cyber-monk

ไม่จำเป็นต้องเพิ่มสิ่งนี้หลังจากที่pluginsอยู่ภายในbuildคุณสามารถเพิ่มสิ่งนี้ได้ก่อน
Fagner Brack

38

หากการคัดลอกอ้างอิงแกะแพ็ค ฯลฯ มีความสำคัญสำหรับโครงการของคุณคุณไม่ควรละเลย คุณต้องใส่ของคุณ<plugins>ใน<pluginManagement>การทดสอบกับคราส Indigo SR1, Maven 2.2.1


4
ขอขอบคุณมันยังช่วยใน Eclipse Indigo SR2
Stemm

1
ฉันหลงทางนิดหน่อย ... นั่นหมายความว่าใช้รหัสด้านบน แต่<execute />แทนที่จะใช้<ignore />ใช่ไหม ขอบคุณ!
xverges

1
สนใจอธิบายเพิ่มเติมอีกหรือไม่ เพียงแค่ใส่<plugin>ลงไป<pluginManagement>แต่ยังคงอ้างอิงเพื่อทำงานของมันยังคงให้ฉันเตือนเดียวกัน
Arjan

@CaioToOn คุณอาจจะรู้มากกว่านี้ ... ? หลังจากเพิ่มไป<pluginManagement>ยังฉันยังคงต้องเพิ่ม "ปกติ" 2 บรรทัด<build><plugins><plugin>...เช่นกันอ้างอิงหนึ่งตามที่กำหนดค่าใน<pluginManagement>ใช่มั้ย? (ยังเห็น Juno บ่นเรื่องเดียวกันเมื่อเข้า<pluginManagement>)
Arjan

@Arjan คุณควรใส่ของคุณแท็กplugins pluginManagementแต่จะดูที่คำตอบผมให้ด้านล่างstackoverflow.com/a/12109018/179138 สิ่งที่แนะนำจะละเว้นการดำเนินการ แต่ไม่เรียกใช้งานปลั๊กอินบน Eclipse
Caio Cunha

16

หากต้องการทำให้มันใช้งานได้แทนที่จะเพิกเฉยคุณสามารถติดตั้งตัวเชื่อมต่อ m2e สำหรับ maven-dependency-plugin:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

นี่คือวิธีที่คุณจะทำใน Eclipse:

  1. ไปที่หน้าต่าง / การตั้งค่า / Maven / การค้นพบ /
  2. ป้อนแคตตาล็อก URL: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. คลิกเปิดแคตตาล็อก
  4. เลือก m2e-maven-dependency-plugin
  5. สนุก

1
+1 สำหรับคำตอบที่ถูกต้อง เพียงจำให้ทำการแก้ไขpom.xmlไฟล์เล็กน้อยหลังจากติดตั้งปลั๊กอินมิฉะนั้นข้อผิดพลาดอาจไม่หายไป
Fagner Brack

ใน Eclipse Luna แค็ตตาล็อก URL คือdownload.eclipse.org/technology/m2e/discovery/directory-1.5.xml
jansohn

ฉันลองสิ่งนี้แล้ว แต่ฟิลด์ URL แคตตาล็อกไม่สามารถแก้ไขได้! การตั้งค่าของฉันเป็น: download.eclipse.org/technology/m2e/discovery/directory.xml (เช่นที่ไม่มี -1.4) ในตอนท้าย ความคิดเห็นใดที่จะปรับได้อย่างไร
mmo

8

แม้จะมีคำตอบจาก CaioToOn ข้างต้น แต่ฉันก็ยังมีปัญหาในการเริ่มต้นทำงานนี้

หลังจากพยายามหลายครั้งจนได้ผล กำลังวางรุ่นสุดท้ายของฉันที่นี่ - หวังว่าจะเป็นประโยชน์กับคนอื่น

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

คุณช่วยระบุเป้าหมายในการดำเนินการใน eclipse ได้หรือไม่?
Jess

1

ฉันมีปัญหาเดียวกันเมื่อพยายามโหลดโครงการ Hadoop ใน eclipse ฉันลองใช้วิธีแก้ไขปัญหาข้างต้นและฉันเชื่อว่าอาจใช้งานได้ใน Eclipse Kepler ... ไม่แน่ใจอีกต่อไป (ลองหลายสิ่งหลายอย่างเกินไป)

ด้วยปัญหาทั้งหมดที่ฉันมีฉันตัดสินใจที่จะไปยัง Eclipse Luna และวิธีแก้ไขปัญหาข้างต้นไม่ได้ผลสำหรับฉัน

มีอีกโพสต์ที่แนะนำให้เปลี่ยน ... แท็กเป็นแพ็คเกจ ฉันเริ่มทำเช่นนั้นและมันจะ "ชัดเจน" ข้อผิดพลาด ... อย่างไรก็ตามฉันเริ่มคิดว่าการเปลี่ยนแปลงจะกัดฉันในภายหลัง - ฉันไม่ใช่ผู้เชี่ยวชาญใน Maven

โชคดีที่ฉันพบวิธีลบข้อผิดพลาดทั้งหมด ไปที่หน้าต่าง -> การตั้งค่า -> Maven-> ข้อผิดพลาด / คำเตือนและเปลี่ยน "การดำเนินการปลั๊กอินไม่ครอบคลุมในวงจรชีวิต ... " ตัวเลือก "ละเว้น" หวังว่ามันจะช่วย


0

ฉันรู้ว่านี่คือโพสต์เก่า แต่ฉันต่อสู้วันนี้กับปัญหานี้และฉันใช้แม่แบบจากหน้านี้: 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>

และทุกอย่างทำงานได้ดีภายใต้ m2e 1.3.1

เมื่อฉันพยายามที่จะใช้

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

ฉันยังได้รับm2eข้อผิดพลาด


ใช่นี่คือจุดประสงค์ของรายการนี้: m2e ต้องการตัวเชื่อมต่อเพื่อแมปการประมวลผลปลั๊กอินในวงจรชีวิตการสร้าง Eclipse <br/> แม้ในขณะที่เขียนความคิดเห็นของฉัน m2e สนับสนุนตัวเชื่อมต่อดังกล่าวเพียงไม่กี่ตัวเท่านั้น: คุณต้องใช้lifecycle-mappingMaven plugin เพื่อสั่งให้ m2e รู้วิธีจัดการกับปลั๊กอินที่ไม่รองรับ (ที่นี่maven-dependency-plugin)
Olivier B.

0

ตัวเลือกอื่นคือไปที่แท็บปัญหาคลิกขวาที่ข้อผิดพลาดคลิกใช้การแก้ไขด่วน ควรสร้างละเว้นรหัส xml และใช้ไฟล์. pom กับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.