M2E และมี maven สร้างซอร์สโฟลเดอร์เป็นโฟลเดอร์ซอร์ส eclipse


91

ฉันมีโครงการ maven ใน eclipse และมีเป้าหมาย maven ที่เรียกใช้ตัวประมวลผลคำอธิบายประกอบเพื่อสร้างโค้ด โฟลเดอร์ผลลัพธ์สำหรับรหัสนี้คือเป้าหมาย / สร้างแหล่งที่มา / apt

เพื่อให้ eclipse เห็นโค้ดที่สร้างขึ้นนี้ฉันต้องเพิ่มเป้าหมาย / สร้างแหล่งที่มา / apt เป็นโฟลเดอร์ต้นทางให้กับโปรเจ็กต์ eclipse

อย่างไรก็ตามสิ่งนี้ทำให้เกิดข้อผิดพลาดประเภท "Maven Configuration Problem" พูด

การกำหนดค่าโปรเจ็กต์ไม่เป็นปัจจุบันสำหรับ pom.xml เรียกใช้การอัปเดตการกำหนดค่าโครงการ

ฉันคิดว่าฉันเข้าใจว่าทำไมถึงเป็นเช่นนี้เนื่องจาก eclipse มีชุดของโฟลเดอร์ต้นทางที่แตกต่างกันไปในชุดของ maven แต่ฉันต้องการชุดที่แตกต่างนี้เนื่องจากฉันต้องการคราสเพื่อให้สามารถดูโฟลเดอร์ซอร์สที่สร้างขึ้น ...

เมื่อสร้าง maven บริสุทธิ์โฟลเดอร์ซอร์สเหล่านี้จะรวมอยู่ในบิลด์โดย maven

btw ฉันได้อัปเกรดเป็น eclipse อย่างเป็นทางการของปลั๊กอิน maven eclipse, m2e 1.0 - สิ่งที่เคยเป็น m2eclipse ฉันต้องการตรวจสอบว่าฉันสามารถหาวิธีแก้ไข / วิธีแก้ปัญหานี้ได้หรือไม่ด้วยปลั๊กอิน m2e ก่อนที่ฉันจะต้องกลับไปใช้ m2eclipse เวอร์ชันเก่า

คำตอบ:


105

คุณจำเป็นต้องแนบไดเรกทอรีต้นทางที่มีการสร้างผู้ช่วยปลั๊กอิน

ชอบมาก:

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

คุณจะต้อง:

  • ติดตั้ง "Apt M2E Connector" จาก Eclipse Marketplace โดยคลิกข้อผิดพลาดในแท็บภาพรวมของ pom.xml แล้วเลือก "Discover"
  • ตรวจสอบว่าไม่มีตัวกรองการเรียกใช้ปลั๊กอินสำหรับ build-helper-maven-plugin (ดูhttps://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html )

4
โซลูชันนี้ใช้งานได้ดีเมื่อm2e connector for build-helper-maven-pluginติดตั้งใน Eclipse
Brad Cupit

ไม่ได้ผลสำหรับฉัน คุณสามารถอธิบายรายละเอียดเกี่ยวกับการตั้งค่า build-helper-plugin ได้หรือไม่?
Kevin Wong

<plugin> <groupId> org.codehaus.mojo </groupId> <artifactId> build-helper-maven-plugin </artifactId> <executions> <execution> <id> add-source </id> <phase> create- แหล่งที่มา </phase> <goals> <goal> add-source </goal> </goals> <configuration> <sources> <source> $ {project.build.directory} / created -ources / java / </source> <source> $ {project.build.directory} / jaxws / wsimport / java </source> </sources> </configuration> </execution> </executions> </plugin>
Kevin Wong

2
ด้วย Kepler ฉันต้องติดตั้งตัวเชื่อมต่อ m2e ด้วยเพื่อสร้างปลั๊กอินตัวช่วย maven (เพียงแค่เปิด pom ของคุณในโปรแกรมแก้ไข maven pom ของ eclipse และคลิกที่ลิงค์สีแดงที่ด้านบน)
Snicolas

1
เท่าที่ผมสามารถบอกได้ว่าเป็นของbuild-helper-maven-pluginที่มี<version>การระบุเป็น3.2.0(ล่าสุดเช่นการเขียน) มีความจำเป็นต้องใช้การเชื่อมต่อ M2E พาร์ทเมนต์ ปัจจุบันทำงานกับ Eclipse IDE 2020-06 โดยใช้ Maven 3.6.3 ใน Eclipse และปัญหาของเราเกี่ยวกับโฟลเดอร์ต้นทางที่มีการยกเว้น (**) หายไปหลังจากพยายามเพิ่มพา ธ ไดเร็กทอรีของโฟลเดอร์ต้นทางในตอนนี้การรวมทั้งหมดมี (** / *. java) อยู่ในนั้น
tom_mai78101

80

คลิกขวาที่ข้อความแสดงข้อผิดพลาด:

คอนฟิกูเรชันโปรเจ็กต์ไม่ทันสมัยด้วย pom.xml รันการอัพเดตคอนฟิกูเรชันโปรเจ็กต์

ในปัญหาดูและเลือกแก้ไขด่วนและคลิกเสร็จสิ้นเพื่อเลือกค่าเริ่มต้นการกำหนดค่าโครงการปรับปรุง วิธีนี้แก้ไขได้


1
สิ่งนี้ใช้ได้กับฉันด้วย เหตุใดจึงไม่เป็นคำตอบที่ยอมรับ ดูเหมือนว่าคำตอบที่ได้รับการยอมรับจะมากเกินไป
Niels Basjes

14
@NielsBasjes นี่ไม่ใช่คำตอบที่ยอมรับเพราะมันไม่เป็นประโยชน์ เมื่อคุณเพิ่มบางสิ่งลงในเส้นทางการสร้างใน Eclipse นั่นหมายความว่าคุณไม่ได้ซิงค์กับ POM อีกต่อไปดังนั้นคำเตือน การอัปเดตคอนฟิกูเรชันโปรเจ็กต์เพียงแค่ลบรายการพา ธ การสร้างพิเศษซึ่งเป็นปัญหาเริ่มต้นที่จะเริ่มต้น
ฟิลิป

4

หลังจากเปลี่ยนไปใช้ m2e / maven / apt เวอร์ชันใหม่แล้ว ... ฉันมี builderrors เนื่องจากไฟล์ที่ซ้ำกันซึ่งเกิดจาก buildpath ที่เพิ่มโดย buildhelper ดังนั้นฉันจึงจำเป็นต้องลบ -Folders "apt-created" - buildhelper

เพื่อแก้ไขปัญหาใน Eclipse ไม่ได้เพิ่มโฟลเดอร์ "apt-created" -folder ผ่าน Update Maven Configuration ใน M2E ฉันได้เขียน M2E Plugin เพื่อแก้ไขปัญหานี้ เพิ่ม outputDirectories ที่กำหนดค่าไว้ใน maven-apt-plugin ไปยัง buildpath ของ Project

https://apt-m2e.googlecode.com


1
น่าเสียดายที่ @Stefan Wo หน้าปลั๊กอิน / repo ของคุณตอนนี้เป็น 404 ที่ googlecode.com คุณคิดจะอัปเดตรวมถึงรายการ Eclipse Marketplace หรือไม่ ดูmarketplace.eclipse.org/content/apt-m2e-connector
maxxyme

3

ใน m2e 1.0 การจัดการปลั๊กอิน Maven มีการเปลี่ยนแปลง คุณอาจขาดส่วนขยาย m2e เฉพาะสำหรับปลั๊กอินสร้างโค้ดของคุณ นี่คือเอกสารทั้งหมดที่ฉันหาได้

รายงานข้อบกพร่องนี้อาจเกี่ยวข้องด้วย


ฉันเดาว่า m2e เป็นของใหม่และมีการพัฒนาที่โดดเด่นมากมาย
Michael Wiles

2
ฉันเชื่อว่าปัญหาคือเพียงแค่ใช้ปลั๊กอิน Maven กับโครงการ m2eclipse อย่างที่ m2eclipse เคยทำมานั้นเพิ่งจะใช้งานได้เกือบตลอดเวลา แต่ไม่ได้รับประกันว่าจะทำในสิ่งที่ถูกต้องเสมอไป แนวทางใหม่นี้อาจมีความมั่นคงมากขึ้น แต่ต้องการให้ปลั๊กอิน Maven จำนวนมากมีคู่หู m2e
Nicola Musatti

2

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

ร้องขอบน CXF JIRA (ดู1 ) เพื่อเพิ่มการแมปวงจรชีวิตในปลั๊กอิน cxf-codegen-plugin สิ่งนี้จะต้องใช้ m2e 1.1 แต่ฉันเชื่อว่าเป็นแนวทางที่ดีกว่าการมีตัวเชื่อมต่อที่สร้างขึ้นนอกโครงการ cxf โดยสมมติว่า API การทำแผนที่วงจรชีวิตจะเปลี่ยนน้อยกว่า cxf-codegen-plugin และ cxf


0

คุณยังสามารถใช้ขั้วต่อ buildhelper m2e ที่มีอยู่ในแค็ตตาล็อกการค้นพบ ฉันใช้ Eclipse 3.7


0

Eclipse Java EE IDE สำหรับนักพัฒนาเว็บ เวอร์ชัน: Juno Service Release 1

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

mvn clean install

ทำงานได้อย่างสมบูรณ์

แต่ใน eclipse ฉันมีข้อผิดพลาดเดียวกันกับคลาส Asinc

เพียงกด F5 บนโปรเจ็กต์ แก้ไขปัญหานี้


0

นี่คือสิ่งที่ฉันพบว่าใช้งานได้ดีโดยใช้สปริง 3.1.1 ซึ่งมีเวอร์ชัน 3.0.6 ด้วยเช่นกัน เมื่อฉันได้รับการตั้งค่าปลั๊กอินและใส่ลงในพื้นที่ที่ถูกต้องของ pom และรวม argline และรับรองว่ามีแหล่งที่มาของ java ใส่ลงในโฟลเดอร์เป้าหมาย / แหล่งที่มา / cxf จากนั้น maven ก็สร้างแหล่งที่มาได้

....

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

หากโฟลเดอร์ wsdl ของคุณอยู่ใน $ {basedir} / src / main / resources ระบบจะค้นหาโดยอัตโนมัติ

หวังว่านี่จะช่วยได้! ~ wildbill


0

ในกรณีที่มีเหตุผลบางประการคุณไม่สามารถใช้ปลั๊กอินตัวช่วยสร้างได้วิธีที่ง่ายที่สุด (แม้ว่าจะไม่สะดวกและค่อนข้างน่าเบื่อ) ฉันพบว่าต้องจัดการกับสิ่งนี้คือ:

  1. แยกซอร์สโค้ดที่สร้างขึ้นเป็นโปรเจ็กต์หรือโมดูลย่อยของตัวเอง
  2. คุณจะต้องปิดโปรเจ็กต์นี้ไว้เป็นส่วนใหญ่หรือไม่นำเข้าสู่ Eclipse เมื่อคุณกำลังทำงานกับโปรเจ็กต์พาเรนต์
  3. ในโปรเจ็กต์หลักที่ต้องการโค้ดที่สร้างขึ้นตรวจสอบให้แน่ใจว่าตอนนี้ขึ้นอยู่กับโปรเจ็กต์ซอร์สโค้ดที่สร้างขึ้นผ่านการพึ่งพา Maven pom
  4. mvn installเมื่อคุณจำเป็นต้องปรับปรุงรหัสไปสร้างโครงการรหัสที่สร้างและเรียกใช้ ตอนนี้รีเฟรชโครงการหลักโดยคลิกขวาและเลือกMaven-> อัปเดตโครงการ ...

โดยทั่วไปจะใช้ได้ดีกับโปรเจ็กต์ที่ใช้ซอร์สกึ่งสแตติกสำหรับการสร้างโค้ดเช่น SOAP WSDLs (Apache CXF) หรือโค้ดที่สร้างจากฐานข้อมูล (jOOQ) สำหรับ APT และ AspectJ-like-code อื่น ๆ จะใช้ไม่ได้เช่นกันเนื่องจากคุณกำลังแก้ไขซอร์สบ่อยๆ


-1

การกำหนดค่าไปยังปลั๊กอินตัวช่วยสร้างได้ผลสำหรับเรา

แต่โปรดทราบว่าโฟลเดอร์ปลายทางจะต้องเท่ากับการกำหนดค่าของปลั๊กอินที่คุณใช้สำหรับการประมวลผลคำอธิบายประกอบเองเสมอ

ตัวอย่างเช่น maven-processor-plugin ใช้โฟลเดอร์เป้าหมาย $ {project.build.directory} / created -ources / apt เป็นค่าเริ่มต้น หากคุณต้องการปลายทางอื่นสำหรับไฟล์ต้นฉบับที่คุณสร้างขึ้นคุณสามารถตั้งค่าโดยแท็กดังที่แสดงด้านล่าง

<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

นี่คือวิธีแก้ปัญหา

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