M2E và có các thư mục nguồn được tạo maven làm thư mục nguồn eclipse


91

Tôi có một dự án maven trong eclipse và có các mục tiêu maven chạy bộ xử lý chú thích để tạo mã. Thư mục đầu ra cho mã này là target / created-sources / apt.

Để eclipse nhìn thấy mã được tạo này, tôi cần thêm target / created-sources / apt làm thư mục nguồn vào dự án eclipse.

Tuy nhiên, điều này gây ra lỗi loại "Vấn đề cấu hình Maven" nói rằng

Cấu hình dự án không được cập nhật với pom.xml. Chạy cập nhật cấu hình dự án

Tôi nghĩ rằng tôi hiểu tại sao lại xảy ra trường hợp này vì eclipse có một tập hợp các thư mục nguồn khác với tập hợp của maven. Nhưng tôi cần bộ khác này, vì tôi cần nhật thực để có thể xem các thư mục nguồn được tạo ...

Khi xây dựng một maven thuần túy, các thư mục nguồn này sẽ được maven đưa vào bản dựng.

btw, tôi đã nâng cấp lên bản phát hành nhật thực chính thức của plugin maven eclipse, m2e 1.0 - cái từng là m2eclipse. Tôi muốn xem liệu tôi có thể tìm ra cách giải quyết / giải quyết vấn đề này với plugin m2e hay không trước khi tôi phải quay lại phiên bản m2eclipse cũ.

Câu trả lời:


105

Bạn cần đính kèm thư mục nguồn với build-helper-plugin .

Như vậy:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/java/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
 </plugin>

Bạn cũng sẽ cần:


4
giải pháp này hoạt động tuyệt vời khi m2e connector for build-helper-maven-pluginđược cài đặt trong Eclipse
Brad Cupit

Không hiệu quả với tôi. Bạn có thể nói rõ hơn về thiết lập build-helper-plugin không?
Kevin Wong

<plugin> <groupId> org.codehaus.mojo </groupId> <artifactId> build-helper-maven-plugin </artifactId> <executions> <execution> <id> add-source </id> <phase> create- nguồn </phase> <goals> <goal> add-source </goal> </goals> <configuration> <sources> <source> $ {project.build.directory} / created-sources / java / </source> <source> $ {project.build.directory} / jaxws / wsimport / java </source> </sources> </configuration> </execution> </executions> </plugin>
Kevin Wong

2
Với Kepler, tôi cũng phải cài đặt trình kết nối m2e cho plugin maven trợ giúp xây dựng. (Chỉ cần mở pom của bạn bên trong trình chỉnh sửa maven pom của eclipse và nhấp vào liên kết màu đỏ ở trên cùng).
Snicolas

1
Theo như tôi có thể nói, kể từ build-helper-maven-pluginkhi <version>được chỉ định là 3.2.0(mới nhất khi viết), không cần sử dụng Apt M2E Connector. Hiện đang làm việc trên Eclipse IDE 2020-06, sử dụng Maven 3.6.3 được nhúng trong Eclipse và các vấn đề của chúng tôi với thư mục nguồn có phần loại trừ (**) đã biến mất sau khi cố gắng thêm đường dẫn thư mục của thư mục nguồn vào. Bây giờ, tất cả các phần bao gồm đều có (** / *. java) trong chúng.
tom_mai78101

80

Bấm chuột phải vào thông báo Lỗi:

Cấu hình dự án không được cập nhật với bản cập nhật cấu hình dự án chạy pom.xml

trong Dạng xem Sự cố và chọn Khắc phục nhanh và bấm Kết thúc để chọn cấu hình dự án Cập nhật mặc định . Điều này sửa chữa nó.


1
Điều này cũng làm việc cho tôi. Tại sao đây không phải là câu trả lời được chấp nhận? Có vẻ như câu trả lời được chấp nhận làm quá nhiều.
Niels Basjes

14
@NielsBasjes đây không phải là câu trả lời được chấp nhận vì đơn giản là nó không hữu ích. Khi bạn thêm thứ gì đó vào đường dẫn xây dựng trong Eclipse, điều đó có nghĩa là bạn không còn đồng bộ với POM nữa, do đó có cảnh báo. Việc cập nhật cấu hình dự án chỉ đơn giản là loại bỏ mục nhập đường dẫn xây dựng bổ sung, đây là vấn đề ban đầu bắt đầu.
Phil

4

Sau khi chuyển sang các phiên bản mới của m2e / maven / apt, ... tôi đã gặp lỗi trình tạo do các tệp trùng lặp, gây ra bởi đường dẫn xây dựng được trình trợ giúp thêm vào, vì vậy tôi cần xóa các thư mục "apt-tạo" khỏi trình trợ giúp.

Để khắc phục sự cố trong Eclipse, không thêm thư mục "apt-created" thông qua Cập nhật cấu hình Maven trong M2E, tôi đã viết một Plugin M2E để khắc phục sự cố này. Nó thêm các outputDirectories được định cấu hình trong maven-apt-plugin vào đường dẫn xây dựng của Dự án.

https://apt-m2e.googlecode.com


1
rất tiếc @Stefan Wo trang / kho plugin của bạn hiện là 404 tại googlecode.com; bạn có phiền cập nhật nó cũng như mục nhập Thị trường Eclipse không? xem marketplace.eclipse.org/content/apt-m2e-connector
maxxyme

3

Trong m2e 1.0, việc xử lý các plugin Maven đã thay đổi. Bạn có thể thiếu một phần mở rộng m2e cụ thể cho plugin tạo mã của mình. Đây là tất cả các tài liệu tôi quản lý để tìm thấy.

Đây báo cáo lỗi cũng có thể có liên quan.


tôi đoán M2E là mới và có nhiều phát triển vượt bậc
Michael Wiles

2
Tôi tin rằng vấn đề là chỉ áp dụng các plugin Maven cho các dự án m2eclipse, như m2eclipse đã từng làm, chỉ hoạt động hiệu quả trong hầu hết thời gian, nhưng không được đảm bảo luôn làm đúng. Cách tiếp cận mới có khả năng vững chắc hơn, nhưng yêu cầu nhiều plugin Maven phải có bản sao của m2e.
Nicola Musatti

2

https://bugs.eclipse.org/bugs/show_bug.cgi?id=350081

yêu cầu trên CXF JIRA (xem 1 ) để thêm ánh xạ vòng đời trong chính cxf-codegen-plugin. Điều này sẽ yêu cầu m2e 1.1 nhưng tôi tin rằng đó là cách tiếp cận tốt hơn so với việc có các trình kết nối được xây dựng bên ngoài dự án cxf, giả sử rằng API ánh xạ vòng đời sẽ thay đổi ít thường xuyên hơn so với cxf-codegen-plugin và cxf.


0

Bạn cũng có thể sử dụng trình kết nối m2e của trình trợ giúp có sẵn trong danh mục khám phá. Tôi đang sử dụng Eclipse 3.7


0

Eclipse Java EE IDE dành cho nhà phát triển web. Phiên bản: Bản phát hành dịch vụ Juno 1

mvn archetype:generate \
   -DarchetypeGroupId=org.codehaus.mojo \
   -DarchetypeArtifactId=gwt-maven-plugin \
   -DarchetypeVersion=2.5.0

mvn clean install

hoạt động hoàn hảo.

Nhưng trong nhật thực, tôi gặp lỗi tương tự trên lớp Asinc.

Chỉ cần nhấn F5 trên dự án. Khắc phục sự cố này.


0

Đây là những gì tôi thấy rằng hoạt động tốt bằng cách sử dụng Spring 3.1.1 có phiên bản 3.0.6 cũng như trong đó. Khi tôi đã thiết lập plugin và đưa vào đúng khu vực của pom và bao gồm argline và endorseddirs để đưa các nguồn java vào thư mục target / created-sources / cxf thì maven tạo các nguồn là được.

....

 <properties>...

   <dependencyManagement>
      <dependencies>.....
   </dependencyManagement>

<dependencies>
   <dependency>....

</dependencies>



<!-- *************************** Build process ************************************* -->
<build>
    <finalName>eSurety</finalName>
    <plugins>
        <!-- Force Java 6 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- Deployent on AS from console
        <plugin>
            <groupId>org.jboss.as.plugins</groupId>
            <artifactId>jboss-as-maven-plugin</artifactId>
            <version>${version.jboss.as.maven.plugin}</version>
        </plugin>
        -->

        <!-- wildbill added tomcat plugin -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.0</version>              
        </plugin>

        <!-- Surefire plugin before 2.9 version is buggy. No need to declare here,
              it's being referenced below w/ the version
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
        </plugin>
        -->

        <!-- developer added these -->   
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>           
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>                       
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>                       
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                    <artifactItem>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>target/generated-sources/cxf</outputDirectory>
            </configuration>                      
        </plugin>                                                 
    </plugins>
</build>



<!-- *********************** Profiles ************************************ -->
<profiles>
    <profile>
        <!-- When built in OpenShift the 'openshift' profile will be 
            used when invoking mvn. -->
        <!-- Use this profile for any OpenShift specific customization 
            your app will need. -->
        <!-- By default that is to put the resulting archive into the 
            'deployments' folder. -->
        <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
        <id>projName</id>
        <build>
            <plugins>                                                   
                <plugin>
                    <groupId>org.apache.cxf</groupId>
                    <artifactId>cxf-codegen-plugin</artifactId>
                    <version>2.5.2</version>                        
                    <executions>
                        <execution>
                            <id>process-sources</id>
                            <phase>generate-sources</phase>                                                                                               
                            <configuration>
                                <fork>once</fork>
                                <additionalJvmArgs>-Djava.endorsed.dirs=target/generated-sources/cxf</additionalJvmArgs>                                          
                            </configuration>
                            <goals>                             
                                <goal>wsdl2java</goal>
                            </goals>
                        </execution>
                    </executions>                       
                    <dependencies>
                        <dependency>
                           <groupId>com.sun.xml.bind</groupId>
                           <artifactId>jaxb-impl</artifactId>
                           <version>2.2</version>
                        </dependency>
                        <dependency>
                           <groupId>com.sun.xml.bind</groupId>
                           <artifactId>jaxb-xjc</artifactId>
                           <version>2.2</version>
                        </dependency>
                     </dependencies>
                </plugin>

                <!-- Actual war created in default target dir -->
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>                                               
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Nếu thư mục wsdl của bạn nằm trong $ {basedir} / src / main / resources, nó sẽ tự động tìm thấy nó

Hi vọng điêu nay co ich! ~ wildbill


0

Trong trường hợp vì lý do nào đó mà bạn không thể sử dụng plugin trình trợ giúp xây dựng một cách dễ dàng nhất (mặc dù không thuận tiện và hơi tẻ nhạt), tôi đã tìm cách giải quyết vấn đề này là:

  1. Tách mã nguồn được tạo thành dự án hoặc mô-đun con của riêng nó.
  2. Bạn sẽ muốn giữ dự án này chủ yếu là đóng hoặc không được nhập vào Eclipse khi bạn đang làm việc trên dự án mẹ.
  3. Trong dự án mẹ cần mã được tạo, hãy đảm bảo bây giờ phụ thuộc vào dự án mã nguồn được tạo thông qua phụ thuộc Maven pom.
  4. Khi bạn cần cập nhật mã đã tạo, hãy chuyển đến dự án mã đã tạo và chạy mvn install. Bây giờ làm mới dự án mẹ bằng cách nhấp chuột phải và chọn Maven-> Cập nhật dự án ...

Điều này thường hoạt động tốt cho các dự án sử dụng nguồn bán tĩnh để tạo mã như SOAP WSDL (Apache CXF) hoặc mã được tạo từ cơ sở dữ liệu (jOOQ). Đối với APT và các mã giống AspectJ khác, nó không hoạt động tốt vì bạn đang chỉnh sửa nguồn thường xuyên.


-1

cấu hình cho plugin trình trợ giúp xây dựng đã hoạt động với chúng tôi.

nhưng lưu ý rằng thư mục đích luôn phải bằng với cấu hình của plugin mà bạn đang sử dụng để xử lý chú thích.

ví dụ: maven-processor-plugin sử dụng thư mục đích $ {project.build.directory} / created-sources / apt làm mặc định. nếu bạn muốn có một đích khác cho các tệp nguồn được tạo của mình, bạn có thể đặt nó bằng thẻ như hình dưới đây.

<plugin>
<groupId>org.bsc.maven</groupId>
                <artifactId>maven-processor-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <id>process</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <phase>process-sources</phase>
                        <configuration>
                            <defaultOutputDirectory>apt_generated</defaultOutputDirectory>
                            <processors>
                                <processor>com.any.processor.invoker</processor>
                            </processors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

-3

Đây là giải pháp

  1. Mở Chế độ xem điểm đánh dấu (Cửa sổ> Chế độ xem Hiển thị
  2. Nhấp chuột phải vào thông báo Lỗi
  3. Chọn Sửa nhanh
  4. Nhấp vào Kết thúc
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.