maven-lệ thuộc-plugin (mục tiêu Bản sao phụ thuộc bản sao


155

Tôi có một dự án Maven khá đơn giản:

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

Tuy nhiên, tôi nhận được lỗi sau trong 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

Tại sao tôi quan tâm nếu m2eclipse không "hỗ trợ" nhiệm vụ này? Maven làm, và đó là tất cả những gì tôi thực sự quan tâm. Làm thế nào tôi có thể nhận được lỗi này trong dự án của tôi để biến mất?


4
Những ngày này m2e cung cấp một quickfix để thêm cấu hình phù hợp vào pom.xml của bạn để làm cho m2e bỏ qua mục tiêu không được hỗ trợ.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen, cách khắc phục nhanh là gì?
Muhammad Gelbana

1
@MuhammadGelbana Trong Eclipse, "cách khắc phục nhanh" có nghĩa là: đặt con trỏ vào vấn đề; nhấn Ctrl-1; Chọn Khắc phục nhanh.
Thorbjørn Ravn Andersen

Câu trả lời:


164

Nó dường như là một vấn đề được biết đến. Bạn có thể hướng dẫn m2e bỏ qua điều này.

Tùy chọn 1: pom.xml

Thêm vào sau đây trong <build/>thẻ của bạn :

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

Bạn sẽ cần thực hiện Maven ... -> Cập nhật cấu hình dự án cho dự án của bạn sau này.

Đọc thêm: http://wiki.eclipse.org/M2E_plugin_execut_not_covered#m2e_maven_plugin_coverage_status

Tùy chọn 2: Ghi đè Eclipse toàn cầu

Để tránh thay đổi các tệp POM của bạn, ghi đè bỏ qua có thể được áp dụng cho toàn bộ không gian làm việc thông qua các cài đặt Eclipse.

Lưu tệp này ở đâu đó trên đĩa: https://gist.github.com/maksimov/8906462

Trong Eclipse/Preferences/Maven/Lifecycle Mappingstrình duyệt đến tập tin này và bấm OK:

Cài đặt Eclipse


10
Điều gì xảy ra nếu phụ thuộc bản sao là một bước quan trọng trong việc xây dựng tệp WAR của bạn? Tôi đang làm việc với quái vật cuộc gọi m2Eclipse và ngay cả khi thay đổi hành động để thực thi, các tệp quan trọng không được sao chép vào thư mục đích ...
bartv

1
Đối với các cài đặt bỏ qua được tạo tự động, @PhoneTech, m2e thêm nhận xét "Cấu hình của plugin này chỉ được sử dụng để lưu trữ các cài đặt m2e của Eclipse. Nó không ảnh hưởng đến bản thân Maven." Không chắc điều đó có nghĩa là gì, vì bạn đang nói những điều không được sao chép cho bạn.
Arjan

6
Vâng, nó đã giúp ... nhưng đó là rất nhiều mã để loại bỏ cảnh báo: P
dokaspar

Điều này vẫn cho tôi một cảnh báo, nhưng lỗi đã biến mất.
stevecross

57

Đây là vấn đề của M2E đối với việc thực thi plugin M2E của Eclipse không được đề cập .

Để giải quyết vấn đề này, tất cả những gì bạn phải làm là lập bản đồ vòng đời mà nó không nhận ra và hướng dẫn M2E thực hiện nó.

Bạn nên thêm cái này sau plugins, bên trong build. Điều này sẽ loại bỏ lỗi và đảm M2E nhận ra mục tiêu copy-depenciescủa maven-dependency-pluginvà làm cho công việc POM như mong đợi, sao chép phụ thuộc vào thư mục mỗi khi Eclipse xây dựng nó. Nếu bạn chỉ muốn bỏ qua lỗi, sau đó bạn thay đổi <execute />cho <ignore />. Không cần bao vây của bạn maven-dependency-pluginvào pluginManagement, như đề xuất trước đây.

<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
Điều này giải quyết nó thực sự. Và tôi đã trở nên ngu ngốc, nghĩ rằng khi mọi người đang nói về việc di chuyển <plugins>vào <pluginManagement>một người nên thực sự di chuyển <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>vào đó. Nhưng đó là về những <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>gì cần phải được đưa vào <pluginManagement>. Khi sử dụng Quick Fix trong Eclipse, điều tương tự được thêm vào trên thông thường <plugins>và có vẻ như vị trí đó cũng hoạt động tốt. Chìa khóa là để thay đổi <ignore>thành <execute>. Đẹp.
Arjan

1
Tìm thấy tôi cần <runOnIncremental> false </ runOnIncremental> trong khi thực hiện như được đề xuất trên liên kết bạn cung cấp. Cảm ơn câu trả lời đã đặt tôi vào con đường đúng.
nhà sư mạng

Không cần thêm cái này SAU pluginsbên trong của bạn build, bạn có thể thêm cái này trước.
Fagner Brack

38

Nếu phụ thuộc bản sao, giải nén, đóng gói, v.v., rất quan trọng cho dự án của bạn, bạn không nên bỏ qua nó. Bạn cần phải kèm của bạn <plugins>trong <pluginManagement>thử nghiệm với Eclipse Indigo SR1, maven 2.2.1


4
Cảm ơn, nó cũng giúp trong Eclipse Indigo SR2
thân từ

1
Tôi hơi bị mất ... Điều đó có nghĩa là sử dụng mã ở trên nhưng <execute />thay vì <ignore />? Cảm ơn!
xverges

1
Muốn giải thích thêm một chút? Chỉ cần đặt <plugin>vào <pluginManagement>nhưng vẫn tham khảo nó để thực hiện công việc của mình, vẫn đưa ra cảnh báo tương tự.
Arjan

@CaioToOn, có thể bạn biết thêm ...? Sau khi thêm nó vào <pluginManagement>tôi vẫn cần thêm một dòng 2 "thông thường" <build><plugins><plugin>..., tham khảo một dòng như được cấu hình <pluginManagement>, phải không? (Vẫn thấy Juno phàn nàn về điều tương tự, khi vào <pluginManagement>.)
Arjan

@Arjan bạn nên gửi kèm theo pluginsthẻ của bạn pluginManagement. Nhưng hãy xem câu trả lời tôi đưa ra dưới đây, stackoverflow.com/a/12109018/179138 . Người được đề xuất bỏ qua việc thực thi, nhưng không thực hiện plugin trên Eclipse.
Caio Cunha

16

Để làm cho nó hoạt động, thay vì bỏ qua nó, bạn có thể cài đặt trình kết nối m2e cho plugin phụ thuộc maven:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Đây là cách bạn sẽ làm điều đó trong Eclipse:

  1. đi tới Cửa sổ / Tùy chọn / Maven / Khám phá /
  2. nhập URL Danh mục: http://doad.eclipse.org/tĩ/m2e/discovery/directory-1.4.xml
  3. nhấp vào mở danh mục
  4. chọn plugin m2e-maven-phụ thuộc
  5. thưởng thức

1
+1 cho câu trả lời ĐÚNG. Chỉ cần nhớ thực hiện một chỉnh sửa nhỏ cho pom.xmltệp sau khi cài đặt plugin, nếu không, lỗi có thể không biến mất.
Fagner Brack


Tôi đã thử điều này nhưng các trường Danh mục URL không thể chỉnh sửa! Của tôi được đặt thành: download.eclipse.org/tĩ/m2e/discovery/directory.xml (tức là không có -1.4) ở cuối. Bất kỳ ý tưởng, làm thế nào / nơi một người có thể điều chỉnh đó?
mmo

8

Mặc dù có câu trả lời từ CaioToOn ở trên, tôi vẫn gặp vấn đề khi làm việc này ban đầu.

Sau nhiều lần thử, cuối cùng nó cũng hoạt động. Đang dán phiên bản cuối cùng của tôi ở đây - hy vọng nó sẽ có lợi cho người khác.

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

Bạn có thể vui lòng cung cấp với mục tiêu để thực hiện trong nhật thực?
Jess

1

Tôi gặp vấn đề tương tự khi thử tải dự án Hadoop trong nhật thực. Tôi đã thử các giải pháp ở trên và tôi tin rằng nó có thể đã hoạt động trong Eclipse Kepler ... thậm chí không chắc chắn nữa (đã thử quá nhiều thứ).

Với tất cả các vấn đề tôi gặp phải, tôi quyết định chuyển sang Eclipse Luna và các giải pháp ở trên không hiệu quả với tôi.

Có một bài viết khác đề nghị thay đổi thẻ ... thành gói. Tôi bắt đầu làm điều đó và nó sẽ "xóa" các lỗi ... Tuy nhiên, tôi bắt đầu nghĩ rằng những thay đổi sẽ cắn tôi sau này - tôi không phải là chuyên gia về Maven.

May mắn thay, tôi đã tìm ra cách để loại bỏ tất cả các lỗi. Chuyển đến Window-> Preferences-> Maven-> Error / Warnings và thay đổi tùy chọn "Thực thi plugin không được bao phủ bởi vòng đời ..." thành "Bỏ qua". Hy vọng nó giúp.


0

Tôi biết đây là bài viết cũ nhưng hôm nay tôi cũng vật lộn với vấn đề này và tôi đã sử dụng mẫu từ trang này: 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>

và mọi thứ hoạt động tốt theo m2e1.3.1.

Khi tôi cố gắng sử dụng

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

Tôi cũng gặp m2elỗi.


Vâng, đây chính xác là mục đích của mục này: m2e hiện yêu cầu các trình kết nối để ánh xạ các thực thi bổ trợ trong vòng đời xây dựng Eclipse. <br/> Ngay cả tại thời điểm viết bình luận của tôi, m2e chỉ hỗ trợ một vài trình kết nối như vậy: bạn phải sử dụng lifecycle-mappingplugin Maven để hướng dẫn m2e cách xử lý một plugin không được hỗ trợ (ở đây maven-dependency-plugin)
Olivier B.

0

Một tùy chọn khác là điều hướng đến tab vấn đề, nhấp chuột phải vào lỗi, nhấp vào áp dụng sửa chữa nhanh. Nên tạo mã xml bỏ qua và áp dụng tệp .pom cho bạn.

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.