M2E e avere cartelle di origine generate da Maven come cartelle di origine di eclipse


91

Ho un progetto Maven in Eclipse e ho obiettivi Maven che eseguono processori di annotazione per generare codice. La cartella di output per questo codice è target / generated-sources / apt.

Affinché eclipse possa vedere questo codice generato, devo aggiungere target / generated-sources / apt come cartella di origine al progetto eclipse.

Tuttavia, ciò causa un errore di tipo "Problema di configurazione Maven"

La configurazione del progetto non è aggiornata con pom.xml. Eseguire l'aggiornamento della configurazione del progetto

Penso di capire perché questo è il caso in cui eclipse ha un set diverso di cartelle di origine rispetto al set di Maven. Ma ho bisogno di questo set diverso, poiché ho bisogno di eclipse per essere in grado di vedere le cartelle di origine generate ...

Quando si esegue una build pura di maven, queste cartelle di origine verranno incluse nella build, da maven.

a proposito, ho aggiornato alla versione ufficiale di eclipse del plugin maven eclipse, m2e 1.0 - quello che era m2eclipse. Mi piacerebbe vedere se riesco a trovare una soluzione a questo problema con il plugin m2e prima di dover tornare alla vecchia versione di m2eclipse.

Risposte:


105

Devi collegare la directory dei sorgenti con il plugin build-helper .

Così:

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

Dovrai anche:


4
questa soluzione funziona alla grande quando m2e connector for build-helper-maven-pluginè installato in Eclipse
Brad Cupit

Non funziona per me. Puoi approfondire la configurazione del plug-in build-helper?
Kevin Wong,

<plugin> <groupId> org.codehaus.mojo </groupId> <artifactId> build-helper-maven-plugin </artifactId> <executions> <execution> <id> add-source </id> <phase> generate- sorgenti </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
Con Kepler, ho dovuto installare anche il connettore m2e per il plugin build helper maven. (Basta aprire il tuo pom all'interno dell'editor di maven pom di eclipse e fare clic sul collegamento rosso in alto).
Snicolas

1
Per quanto posso dire, come di build-helper-maven-plugincon <version>specificato come 3.2.0(l'ultima al momento di scrivere), non v'è alcuna necessità di utilizzare Apt M2E Connector. Attualmente lavorando su Eclipse IDE 2020-06, utilizzando Maven 3.6.3 incorporato in Eclipse, ei nostri problemi con la cartella di origine con esclusioni (**) sono scomparsi dopo aver tentato di aggiungere i percorsi delle directory delle cartelle di origine. Ora, tutte le inclusioni hanno (** / *. java) in essi.
tom_mai78101

80

Fare clic con il pulsante destro del mouse sul messaggio di errore:

La configurazione del progetto non è aggiornata con pom.xml Esegui l'aggiornamento della configurazione del progetto

nella visualizzazione Problemi e selezionare Correzione rapida e fare clic su Fine per selezionare la configurazione del progetto di aggiornamento predefinita . Questo lo risolve.


1
Funziona anche per me. Perché non è questa la risposta accettata? Sembra che la risposta accettata faccia troppo.
Niels Basjes

14
@NielsBasjes questa non è la risposta accettata perché semplicemente non è utile. Quando aggiungi qualcosa al percorso di compilazione in Eclipse, significa che non sei più sincronizzato con il POM, da cui l'avviso. L'aggiornamento della configurazione del progetto rimuove semplicemente la voce del percorso di compilazione aggiuntiva, che era il problema iniziale con cui iniziare.
Phil

4

Dopo essere passato alle nuove versioni di m2e / maven / apt, ... ho avuto builderrors a causa dei file duplicati, causati dal percorso di compilazione aggiunto da buildhelper, quindi ho dovuto rimuovere le cartelle "generate da apt" da buildhelper.

Per risolvere il problema in Eclipse, non aggiungendo la cartella "generata da apt" tramite Aggiorna configurazione Maven in M2E, ho scritto un plug-in M2E per risolvere questo problema. Aggiunge le directory output configurate nel plugin maven-apt al buildpath del progetto.

https://apt-m2e.googlecode.com


1
sfortunatamente @Stefan Wo la tua pagina / repo del plugin ora è 404 su googlecode.com; ti dispiacerebbe aggiornarlo, così come la voce di Eclipse Marketplace? vedi marketplace.eclipse.org/content/apt-m2e-connector
maxxyme

3

In m2e 1.0 la gestione dei plugin Maven è cambiata. Potrebbe mancare un'estensione m2e specifica per il plug-in di generazione del codice. Ecco tutta la documentazione sono riuscito a trovare.

Anche questa segnalazione di bug potrebbe essere rilevante.


Immagino che m2e sia nuovo e abbia molti sviluppi eccezionali
Michael Wiles

2
Credo che il problema sia che la semplice applicazione dei plugin Maven ai progetti m2eclipse, come faceva m2eclipse, funzionava per la maggior parte del tempo, ma non era garantito che facesse sempre la cosa giusta. Il nuovo approccio è potenzialmente più solido, ma richiede che molti plugin Maven abbiano una controparte m2e.
Nicola Musatti

2

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

richiesta su CXF JIRA (vedere 1 ) per aggiungere mappature del ciclo di vita nello stesso plugin cxf-codegen. Ciò richiederebbe m2e 1.1 ma credo che sia un approccio migliore rispetto a connettori costruiti al di fuori del progetto cxf, supponendo che l'API di mappatura del ciclo di vita cambierebbe meno frequentemente di cxf-codegen-plugin e cxf.


0

Puoi anche utilizzare il connettore buildhelper m2e disponibile nel catalogo discovery. Sto usando Eclipse 3.7


0

Eclipse Java EE IDE per sviluppatori Web. Versione: Juno Service Release 1

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

mvn clean install

funziona perfettamente.

Ma in Eclipse ho lo stesso errore sulla classe Asinc.

Basta premere F5 sul progetto. Risolvi questo problema.


0

Questo è quello che ho trovato che ha funzionato bene usando la primavera 3.1.1 che ha anche la versione 3.0.6. Una volta che ho configurato i plugin e li ho inseriti nell'area corretta del pom e ho incluso l'argline e gli endorseddir per avere i sorgenti java inseriti nella cartella target / generated-sources / cxf, maven ha generato i sorgenti 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>

Se la tua cartella wsdl è in $ {basedir} / src / main / resources, la troverà automaticamente

Spero che questo ti aiuti! ~ wildbill


0

Nel caso in cui per qualche motivo non sia possibile utilizzare il plugin build helper il modo più semplice (anche se non così conveniente e un po 'noioso) che ho trovato per affrontare questo è:

  1. Separare il codice sorgente generato nel proprio progetto o sottomodulo.
  2. Dovrai mantenere questo progetto prevalentemente chiuso o non importato in Eclipse quando lavori sul progetto principale.
  3. Nel progetto padre che necessita del codice generato, assicurati di dipendere ora dal progetto del codice sorgente generato tramite la dipendenza Maven pom.
  4. Quando è necessario aggiornare il codice generato, andare al progetto del codice generato ed eseguire mvn install. Ora aggiorna il progetto principale facendo clic con il tasto destro e selezionando Maven-> Aggiorna progetto ...

Questo generalmente funziona bene per i progetti che utilizzano una sorgente semi statica per la generazione di codice come SOAP WSDL (Apache CXF) o codice generato da un database (jOOQ). Per APT e altri codici simili a AspectJ non funziona altrettanto bene perché stai modificando spesso il sorgente.


-1

la configurazione del plug-in helper build ha funzionato per noi.

ma attenzione, che la cartella di destinazione deve sempre essere uguale alla configurazione del plugin che stai usando per l'elaborazione delle annotazioni stessa.

ad esempio, il plugin maven-processor utilizza la cartella di destinazione $ {project.build.directory} / generated-sources / apt come impostazione predefinita. se desideri un'altra destinazione per i file sorgente generati, puoi impostarla tramite il tag come mostrato di seguito.

<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

Ecco la soluzione

  1. Apri vista marker (Finestra> Mostra vista
  2. Fare clic con il tasto destro sul messaggio di errore
  3. Seleziona Correzione rapida
  4. Fare clic su Fine
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.