2011-08-23 12 views
77

Ho un progetto di maven in eclissi e ho degli obiettivi di maven che eseguono processori di annotazione per generare codice. La cartella di output per questo codice è target/generate-sources/apt.M2E e avendo generato generatori di cartelle di origine come cartelle di origine di eclissi

Per consentire a eclipse di visualizzare questo codice generato, è necessario aggiungere target/generate-sources/apt come cartella di origine al progetto eclipse.

Tuttavia, questo fa sì che ci sia un errore di tipo "Maven Configurazione problema" dicendo

configurazione del progetto non è up-to-date con pom.xml. Eseguire progetto aggiornamento della configurazione

Credo di capire il motivo per cui questo è il caso, come eclisse ha un diverso insieme di cartelle di origine alla serie di Maven. Ma ho bisogno di questo set diverso, in quanto ho bisogno di eclissi per poter vedere le cartelle di origine generate ...

Quando si crea un puro generatore, queste cartelle di origine saranno incluse nella compilazione, da parte di Maven.

btw, ho eseguito l'aggiornamento alla versione eclipse ufficiale del plug-in eclipse di maven, m2e 1.0 - che era m2eclipse. Mi piacerebbe vedere se riesco a trovare una soluzione a questo problema con il plugin m2e prima di tornare alla versione di m2eclipse precedente.

risposta

97

È necessario allegare la directory di origine con build-helper-plugin.

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

Sarà inoltre necessario:

+4

questa soluzione funziona perfettamente quando il connettore 'm2e per build-helper-maven-plugin' è installato in Eclipse –

+0

felice di averlo scoperto. –

+0

Non funziona per me. Puoi approfondire l'installazione di build-helper-plugin? –

3

Nel M2E 1.0 la gestione dei plugin Maven è cambiato. Potrebbe mancare un'estensione m2e specifica per il plug-in di generazione del codice. Ecco tutti gli documentation che sono riuscito a trovare.

Questo bug report potrebbe anche essere rilevante.

+0

immagino che m2e sia nuovo e abbia un notevole sviluppo –

+2

Credo che il problema sia che applicare i plug-in Maven ai progetti m2eclipse, come era solito fare con m2eclipse, è accaduto solo per la maggior parte del tempo, ma non è stato sempre garantito la cosa giusta. Il nuovo approccio è potenzialmente più solido, ma richiede che molti plugin Maven abbiano una controparte m2e. –

79

Fare clic con il messaggio di errore:

configurazione del progetto non è up-to-date con il progetto Run pom.xml aggiornamento della configurazione

nei problemi Visualizza e selezionare Quick Fix e fare clic su Fine per selezionare il valore predefinito Aggiornamento configurazione progetto. Questo lo risolve.

+1

Questo funziona anche per me. Perché questa non è la risposta accettata?Sembra che la risposta accettata faccia troppo. –

+11

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

4

Dopo il passaggio a nuove versioni di m2e/maven/apt, ...Avevo builderror a causa dei file duplicati, causati dal buildpath aggiunto da buildhelper, quindi avevo bisogno di rimuovere i "Fogli generati da apt" dal buildhelper.

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

https://apt-m2e.googlecode.com

+0

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

0

È inoltre possibile utilizzare il connettore buildhelper M2E disponibile nel catalogo di scoperta. Sto usando Eclipse 3,7

1

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

richiesta su CXF JIRA (vedi 1) per aggiungere mappature del ciclo di vita nel CXF-codegen-plugin stesso. Ciò richiederebbe m2e 1.1 ma credo che sia un approccio migliore rispetto a quello di avere 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

IDE Java EcEse 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 

lavoro perfettamente.

Ma in eclissi ho lo stesso errore sulla classe Asinc.

Basta premere F5 sul progetto. Risolvi questo problema.

0

Questo è quello che ho trovato che funzionava bene con la molla 3.1.1 che ha anche la versione 3.0.6. Una volta ottenuto il setup dei plug-in e inserito nell'area corretta del pom e incluso l'argline e gli endorseddir per far uscire le sorgenti java nella cartella target/generate-sources/cxf, allora 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 cartella WSDL è in $ {} basedir/src/main/risorse che lo troverà automaticamente

Spero che questo aiuti! ~ wildbill

-1

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

ma tenere presente che la cartella di destinazione deve sempre essere uguale alla configurazione del plug-in che si sta utilizzando per l'elaborazione dell'annotazione stessa.

ad esempio il plug-in maven-processor utilizza la cartella di destinazione $ {project.build.directory}/generate-sources/apt come predefinito. se desideri un'altra destinazione per i tuoi file sorgente generati, puoi impostarla con 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. aperta Marker View (Finestra> Mostra vista
  2. fare clic destro sul messaggio di errore
  3. Selezionare Quick Fix
  4. Fare clic su Fine
0

In caso per qualche motivo non è possibile utilizzare il buil d aiutante plug il modo più semplice (anche se non così comodo e un po 'noioso) che ho trovato per affrontare questo è:

  1. separare il codice sorgente generato in un proprio progetto o modulo di sub.
  2. Si vorrà mantenere questo progetto prevalentemente chiuso o non importato in Eclipse quando si lavora sul progetto principale.
  3. Nel progetto padre che richiede il codice generato, assicurarsi di ora dipendere dal progetto del codice sorgente generato tramite la dipendenza da Maven pom.
  4. Quando è necessario aggiornare il codice generato, andare al progetto di codice generato ed eseguire mvn install. Ora aggiornare il progetto principale facendo clic destro e selezionando Maven-> Progetto Aggiornamento ...

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

Problemi correlati