M2E i maven wygenerował foldery źródłowe jako foldery źródłowe zaćmienia

91

Mam projekt Mavena w Eclipse i cele Mavena, które uruchamiają procesory adnotacji w celu generowania kodu. Folder wyjściowy dla tego kodu to target / generated-sources / apt.

Aby eclipse zobaczyło wygenerowany kod, muszę dodać target / generated-sources / apt jako folder źródłowy do projektu eclipse.

Jednak powoduje to wystąpienie błędu typu „Problem z konfiguracją Mavena”

Konfiguracja projektu nie jest aktualna z pom.xml. Uruchom aktualizację konfiguracji projektu

Myślę, że rozumiem, dlaczego tak jest, ponieważ eclipse ma inny zestaw folderów źródłowych niż zestaw mavena. Ale potrzebuję tego innego zestawu, ponieważ potrzebuję zaćmienia, aby móc zobaczyć wygenerowane foldery źródłowe ...

Podczas budowania czystego mavena te foldery źródłowe zostaną uwzględnione w kompilacji przez mavena.

btw, zaktualizowałem do oficjalnego wydania wtyczki maven eclipse, m2e 1.0 - co kiedyś było m2eclipse. Chciałbym sprawdzić, czy uda mi się znaleźć obejście / rozwiązanie tego problemu za pomocą wtyczki m2e, zanim będę musiał wrócić do starej wersji m2eclipse.

Michael Wiles
źródło

Odpowiedzi:

105

Musisz dołączyć katalog źródłowy za pomocą wtyczki build-helper-plugin .

Tak jak to:

 <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ędziesz także musiał:

Michael-O
źródło
4
to rozwiązanie działa świetnie, gdy m2e connector for build-helper-maven-pluginjest zainstalowany w Eclipse
Brad Cupit
Nie działa na mnie. Czy możesz rozwinąć konfigurację wtyczki pomocniczej w budowaniu?
Kevin Wong
<plugin> <groupId> org.codehaus.mojo </groupId> <artifactId> build-helper-maven-plugin </artifactId> <executions> <execution> <id> add-source </id> <phase> generuj- źródła </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
W przypadku Keplera musiałem również zainstalować złącze m2e do wtyczki build helper maven. (Po prostu otwórz swój pom w edytorze maven pom w Eclipse i kliknij czerwony link u góry).
Snicolas,
1
O ile mogę powiedzieć, od build-helper-maven-pluginz <version>określona jako 3.2.0(ostatni dzień piśmie), nie ma potrzeby, aby użyć APT M2E Connector. Obecnie pracuję nad Eclipse IDE 2020-06, używając osadzonego Maven 3.6.3 w Eclipse, a nasze problemy z folderem źródłowym posiadającym wykluczenia (**) zniknęły po próbie dodania ścieżek katalogów folderów źródłowych w. Teraz wszystkie inkluzje mają (** / *. java) w nich.
tom_mai78101
80

Kliknij prawym przyciskiem myszy komunikat o błędzie:

Konfiguracja projektu nie jest aktualna z pom.xml Uruchom aktualizację konfiguracji projektu

w widoku problemów i wybierz opcję Szybka naprawa, a następnie kliknij przycisk Zakończ, aby wybrać domyślną konfigurację projektu aktualizacji . To rozwiązuje problem.

Piotr
źródło
1
U mnie to też działa. Dlaczego nie jest to akceptowana odpowiedź? Wydaje się, że zaakceptowana odpowiedź daje za dużo.
Niels Basjes
14
@NielsBasjes to nie jest akceptowana odpowiedź, ponieważ po prostu nie jest pomocna. Kiedy dodajesz coś do ścieżki kompilacji w Eclipse, oznacza to, że nie jesteś już zsynchronizowany z POM, stąd ostrzeżenie. Aktualizacja konfiguracji projektu po prostu usuwa dodatkowy wpis ścieżki kompilacji, który był początkowym problemem.
Phil,
4

Po przełączeniu się na nowe wersje m2e / maven / apt ... miałem błędy builderror z powodu zduplikowanych plików, spowodowanych dodaniem ścieżki budowania przez buildhelper, więc musiałem usunąć "apt-generowane" -Folders z buildhelpera.

Aby naprawić problem w Eclipse, nie dodając folderu „apt-generowanego” za pośrednictwem aktualizacji konfiguracji Maven w M2E, napisałem wtyczkę M2E, aby naprawić ten problem. Dodaje katalogi outputDirectories skonfigurowane we wtyczce maven-apt-plugin do ścieżki budowania projektu.

https://apt-m2e.googlecode.com

Stefan Wo
źródło
1
niestety @Stefan Wo Twoja strona / repozytorium wtyczek jest teraz 404 na googlecode.com; czy zechciałbyś go zaktualizować, a także wpis w Eclipse Marketplace? patrz marketplace.eclipse.org/content/apt-m2e-connector
maxxyme
3

W m2e 1.0 zmieniła się obsługa wtyczek Maven. Być może brakuje konkretnego rozszerzenia m2e dla wtyczki generującej kod. Oto cała dokumentacja, jaką udało mi się znaleźć.

Ten raport o błędzie może być również istotny.

Nicola Musatti
źródło
myślę, że m2e jest nowe i ma wiele znakomitych rozwiązań
Michael Wiles
2
Uważam, że problem polega na tym, że samo zastosowanie wtyczek Maven do projektów m2eclipse, tak jak to robił m2eclipse, po prostu działało przez większość czasu, ale nie było gwarancji, że zawsze zrobi to dobrze. Nowe podejście jest potencjalnie bardziej solidne, ale wymaga, aby wiele wtyczek Maven miało odpowiednik m2e.
Nicola Musatti
2

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

żądanie na CXF JIRA (patrz 1 ), aby dodać mapowania cyklu życia w samej wtyczce cxf-codegen-plugin. Wymagałoby to m2e 1.1, ale uważam, że jest to lepsze podejście niż posiadanie konektorów zbudowanych poza projektem cxf, przy założeniu, że API mapowania cyklu życia będzie się zmieniać rzadziej niż cxf-codegen-plugin i cxf.

Mike Grandmaison
źródło
0

Możesz również użyć łącznika buildhelper m2e dostępnego w katalogu wykrywania. Używam Eclipse 3.7

Cédric Vidal
źródło
0

Eclipse Java EE IDE dla programistów WWW. Wersja: Juno Service Release 1

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

mvn clean install

działają idealnie.

Ale w zaćmieniu mam ten sam błąd w klasie Asinc.

Po prostu naciśnij F5 na projekcie. Rozwiąż ten problem.

burtsevyg
źródło
0

Okazało się, że to działa dobrze przy użyciu wiosny 3.1.1, która ma również wersję 3.0.6. Po skonfigurowaniu wtyczek i umieszczeniu ich w odpowiednim obszarze pom oraz dołączeniu argline i endorseddirs, aby źródła Java zostały umieszczone w folderze target / generated-sources / cxf, a następnie maven wygenerował źródła w porządku.

....

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

Jeśli twój folder wsdl znajduje się w $ {basedir} / src / main / resources, znajdzie go automatycznie

Mam nadzieję że to pomoże! ~ wildbill

WildBill
źródło
0

W przypadku, gdy z jakiegoś powodu nie możesz użyć wtyczki pomocniczej do budowania w najprostszy sposób (choć nie tak wygodna i nieco żmudna), znalazłem rozwiązanie tego problemu:

  1. Oddziel wygenerowany kod źródłowy do własnego projektu lub modułu podrzędnego.
  2. Będziesz chciał, aby ten projekt był w większości zamknięty lub nie był importowany do Eclipse podczas pracy nad projektem nadrzędnym.
  3. W projekcie nadrzędnym, który wymaga wygenerowanego kodu, upewnij się, że jest on teraz zależny od wygenerowanego projektu kodu źródłowego za pośrednictwem zależności Maven pom.
  4. Gdy musisz zaktualizować wygenerowany kod, przejdź do wygenerowanego projektu kodu i uruchom mvn install. Teraz odśwież projekt nadrzędny, klikając prawym przyciskiem myszy i wybierając Maven-> Aktualizuj projekt ...

Zwykle działa to dobrze w projektach, które używają półstatycznego źródła do generowania kodu, takiego jak SOAP WSDL (Apache CXF) lub kod wygenerowany z bazy danych (jOOQ). W przypadku APT i innych kodów podobnych do AspectJ nie działa tak dobrze, ponieważ często edytujesz źródła.

Adam Gent
źródło
-1

konfiguracja wtyczki pomocnika kompilacji zadziałała dla nas.

ale pamiętaj, że folder docelowy zawsze musi być równy konfiguracji wtyczki, której używasz do samego przetwarzania adnotacji.

na przykład wtyczka maven-procesor używa domyślnie folderu docelowego $ {project.build.directory} / generated-sources / apt. jeśli chcesz mieć inne miejsce docelowe dla generowanych plików źródłowych, możesz ustawić je za pomocą tagu, jak pokazano poniżej.

<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
źródło
-3

Oto rozwiązanie

  1. Otwórz widok znacznika (Okno> Pokaż widok
  2. Kliknij prawym przyciskiem myszy komunikat o błędzie
  3. Wybierz opcję Szybka naprawa
  4. Kliknij Finish
imesh
źródło