M2E dan memiliki folder sumber yang dihasilkan maven sebagai folder sumber gerhana

91

Saya memiliki proyek maven di eclipse dan memiliki tujuan maven yang menjalankan pemroses anotasi untuk menghasilkan kode. Folder keluaran untuk kode ini adalah target / generated-sources / apt.

Agar eclipse melihat kode yang dihasilkan ini, saya perlu menambahkan target / generated-sources / apt sebagai folder sumber ke proyek eclipse.

Namun, ini menyebabkan ada kesalahan jenis "Masalah Konfigurasi Maven" yang mengatakan

Konfigurasi proyek tidak up-to-date dengan pom.xml. Jalankan pembaruan konfigurasi proyek

Saya rasa saya mengerti mengapa hal ini terjadi karena gerhana memiliki kumpulan folder sumber yang berbeda dengan kumpulan maven. Tetapi saya memerlukan set yang berbeda ini, karena saya perlu gerhana agar dapat melihat folder sumber yang dihasilkan ...

Saat melakukan maven murni, folder sumber ini akan disertakan dalam build, oleh maven.

btw, saya telah mengupgrade ke rilis gerhana resmi dari plugin gerhana maven, m2e 1.0 - yang dulunya adalah m2eclipse. Saya ingin melihat apakah saya dapat menemukan solusi / solusi untuk ini dengan plugin m2e sebelum saya harus kembali ke versi m2eclipse lama.

Michael Wiles
sumber

Jawaban:

105

Anda perlu melampirkan direktori sumber dengan plugin build-helper .

Seperti:

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

Anda juga perlu:

Michael-O
sumber
4
solusi ini berfungsi dengan baik ketika m2e connector for build-helper-maven-plugindipasang di Eclipse
Brad Cupit
Tidak berhasil untuk saya. Bisakah Anda menjelaskan tentang penyiapan build-helper-plugin?
Kevin Wong
<plugin> <groupId> org.codehaus.mojo </groupId> <artifactId> build-helper-maven-plugin </artifactId> <executions> <execution> <id> add-source </id> <phase> generate- sumber </phase> <goals> <goal> add-source </goal> </goals> <configuration> <sources> <source> $ {project.build.directory} / generated-sources / java / </source> <source> $ {project.build.directory} / jaxws / wsimport / java </source> </sources> </configuration> </execution> </executions> </plugin>
Kevin Wong
2
Dengan Kepler, saya juga harus menginstal konektor m2e untuk plugin build helper maven. (Buka saja pom Anda di dalam editor maven pom gerhana dan klik tautan merah di bagian atas).
Snicolas
1
Sejauh yang saya tahu, pada build-helper-maven-plugindengan <version>ditetapkan sebagai 3.2.0(terbaru seperti tulisan), tidak ada perlu menggunakan Apt M2E Connector. Saat ini mengerjakan Eclipse IDE 2020-06, menggunakan Maven 3.6.3 yang disematkan di Eclipse, dan masalah kami dengan folder sumber yang memiliki pengecualian (**) hilang setelah mencoba menambahkan jalur direktori folder sumber. Sekarang, semua inklusi memiliki (** / *. java) di dalamnya.
tom_mai78101
80

Klik kanan pesan kesalahan:

Konfigurasi proyek tidak up-to-date dengan pom.xml Jalankan pembaruan konfigurasi proyek

di Problems View dan pilih Quick Fix dan klik Finish untuk memilih konfigurasi default Update project . Ini memperbaikinya.

peter
sumber
1
Ini bekerja untuk saya juga. Mengapa ini bukan jawaban yang diterima? Sepertinya jawaban yang diterima terlalu banyak.
Niels Basjes
14
@NielsBasjes ini bukan jawaban yang diterima karena tidak membantu. Saat Anda menambahkan sesuatu ke jalur build di Eclipse, itu berarti Anda tidak lagi sinkron dengan POM, karena itu peringatannya. Memperbarui konfigurasi proyek hanya menghapus entri jalur build tambahan, yang merupakan masalah awal.
Phil
4

Setelah beralih ke versi baru m2e / maven / apt, ... saya mengalami error build karena file duplikat, yang disebabkan oleh buildpath yang ditambahkan oleh buildhelper, jadi saya perlu menghapus "apt-generated" -Folders dari buildhelper.

Untuk memperbaiki Masalah di Eclipse, tidak menambahkan folder "apt-generated" melalui Update Maven Configuration di M2E, saya telah menulis Plugin M2E untuk memperbaiki masalah ini. Ia menambahkan outputDirectories yang dikonfigurasi di maven-apt-plugin ke buildpath Proyek.

https://apt-m2e.googlecode.com

Stefan Wo
sumber
1
sayangnya @Stefan Wo halaman / repo plugin Anda sekarang 404 di googlecode.com; maukah Anda memperbaruinya, serta entri Eclipse Marketplace? lihat marketplace.eclipse.org/content/apt-m2e-connector
maxxyme
3

Di m2e 1.0, penanganan plugin Maven telah berubah. Anda mungkin kekurangan ekstensi m2e khusus untuk plugin pembuat kode Anda. Ini semua dokumentasi yang berhasil saya temukan.

Laporan bug ini mungkin juga relevan.

Nicola Musatti
sumber
saya kira m2e baru dan memiliki banyak pengembangan luar biasa
Michael Wiles
2
Saya percaya masalahnya adalah bahwa hanya menerapkan plugin Maven ke proyek m2eclipse, seperti yang biasa dilakukan m2eclipse, kebetulan berfungsi hampir sepanjang waktu, tetapi tidak dijamin untuk selalu melakukan hal yang benar. Pendekatan baru ini berpotensi lebih solid, tetapi membutuhkan banyak plugin Maven yang memiliki mitra m2e.
Nicola Musatti
2

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

meminta pada CXF JIRA (lihat 1 ) untuk menambahkan pemetaan siklus hidup di cxf-codegen-plugin itu sendiri. Ini akan membutuhkan m2e 1.1 tetapi saya percaya ini adalah pendekatan yang lebih baik daripada memiliki konektor yang dibangun di luar proyek cxf, dengan asumsi bahwa API pemetaan siklus hidup akan berubah lebih jarang daripada cxf-codegen-plugin dan cxf.

Mike Nenek
sumber
0

Anda juga dapat menggunakan konektor m2e buildhelper yang tersedia di katalog penemuan. Saya menggunakan Eclipse 3.7

Cédric Vidal
sumber
0

Eclipse Java EE IDE untuk Pengembang Web. Versi: Juno Service Release 1

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

mvn clean install

bekerja dengan sempurna.

Tapi di gerhana saya memiliki kesalahan yang sama pada kelas Asinc.

Cukup tekan F5 pada proyek. Perbaiki masalah ini.

burtsevyg.dll
sumber
0

Ini adalah apa yang menurut saya berfungsi dengan baik menggunakan pegas 3.1.1 yang memiliki versi 3.0.6 juga di dalamnya. Setelah saya mendapatkan pengaturan plugin dan memasukkannya ke area pom yang benar dan memasukkan argline dan endorseddirs agar sumber java dimasukkan ke folder target / generated-sources / cxf kemudian maven menghasilkan sumber ok.

....

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

Jika folder wsdl Anda ada di $ {basedir} / src / main / resources, folder itu akan menemukannya secara otomatis

Semoga ini membantu! ~ wildbill

WildBill
sumber
0

Dalam kasus karena alasan tertentu Anda tidak dapat menggunakan plugin build helper dengan cara termudah (meskipun tidak semudah dan agak membosankan) yang saya temukan untuk mengatasinya adalah:

  1. Pisahkan kode sumber yang dibuat ke dalam proyek atau sub modulnya sendiri.
  2. Anda akan ingin membuat proyek ini ditutup atau tidak diimpor ke Eclipse saat Anda mengerjakan proyek induk.
  3. Dalam proyek induk yang membutuhkan kode yang dihasilkan, sekarang pastikan untuk bergantung pada proyek kode sumber yang dihasilkan melalui ketergantungan pom Maven.
  4. Saat Anda perlu memperbarui kode yang dihasilkan, buka proyek kode yang dihasilkan dan jalankan mvn install. Sekarang segarkan proyek induk dengan mengklik kanan dan memilih Maven-> Perbarui Proyek ...

Ini umumnya berfungsi dengan baik untuk proyek yang menggunakan sumber semi statis untuk pembuatan kode seperti SOAP WSDL (Apache CXF) atau kode yang dihasilkan dari database (jOOQ). Untuk APT dan kode serupa AspectJ lainnya, ini tidak berfungsi dengan baik karena Anda sering mengedit sumbernya.

Adam Gent
sumber
-1

konfigurasi ke plugin build helper berhasil untuk kami.

namun perlu diketahui, bahwa folder tujuan harus selalu sama dengan konfigurasi plugin yang Anda gunakan untuk pemrosesan anotasi itu sendiri.

misalnya maven-processor-plugin menggunakan folder target $ {project.build.directory} / generated-sources / apt sebagai default. jika Anda menginginkan tujuan lain untuk file sumber yang Anda buat, Anda dapat mengaturnya dengan tag seperti yang ditunjukkan di bawah ini.

<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>
Hannes Kogler
sumber
-3

Inilah solusinya

  1. Buka Marker View (Window> Show View
  2. Klik kanan pada pesan Error
  3. Pilih Perbaikan Cepat
  4. Klik Selesai
imesh
sumber