2009-07-28 16 views
40

Sto utilizzando Google buffer protocollo per generare alcune classi Java per il mio progetto. Utilizzando Maven 2 e il suo plugin "antrun", queste classi sono appena generati Prima di compilare, in uscita per indirizzare /-sources generati e messi sul percorso di classe durante la costruzione. Quindi costruire il progetto dal POM non è un problema.Come posso ottenere Eclipse per risolvere le classi generate con Maven 2?

Tuttavia, Eclipse non sa come risolvere la classe generata, poiché la cartella in cui si trova non sembra sul percorso di classe dell'IDE durante lo sviluppo. Sto usando m2eclipse e devo gestire le dipendenze per me, quindi mi ero aspettato che Maven si occupasse di questo.

Come posso ottenere il supporto IDE (completamento codice ecc.) Per il codice generato?

+0

Ho postato questa domanda e una (possibile) risposta mentre stavo provando le cose, in parte per condividere ciò che apprezzo d, in parte perché, anche se alla fine l'ho fatto funzionare, ancora non capisco perché. –

+0

La domanda http://stackoverflow.com/q/7160006/873282 sembra essere correlata. La risposta http://stackoverflow.com/a/7160614/873282 suggerisce di utilizzare il plugin build-helper eventualmente insieme al connettore M2T APT. Attualmente, non funziona al mio fianco con M2E ed Eclipse Kepler. – koppor

risposta

13

Cosa si dovrebbe vedere nel progetto explorer è un contenitore denominato "Maven Dipendenze "al posto delle solite" biblioteche di riferimento ". Ciò significa che m2eclipse sta gestendo il tuo percorso di costruzione.

Nel mio caso, per raggiungere questo obiettivo, ho controllato "includono i moduli" e un controllato "compilatore plug Skip Maven durante l'elaborazione delle risorse" nella sezione "Maven" del Progetto-> Proprietà.

+0

m2eclipse: giusto, buon punto.+1 La mia risposta è stata più generale – VonC

+0

Ora mi chiedo se m2eclipse abbia mai gestito le dipendenze prima di apportare tali impostazioni perché le mie dipendenze ora sembrano molto diverse. Strano. (Avevo solo Maven-ized questo progetto alcuni giorni fa, forse era parte del problema) –

+14

@HannoFietz: Ho lo stesso problema e non riesco a trovare quelle opzioni nella sezione Maven. C'è un modo diverso per le versioni più recenti? – letmaik

2

Hai provato ad aggiornare il progetto Eclipse?

alt text http://oyvindhauge.com/blog/wp-content/eclipse_refresh.png

Quando uno strumento esterno generare nuovi file o aggiornamenti quelli vecchi, Eclipse non sarà in grado di rilevare la modifica fino alla successiva richiesta.

Un'altra opzione sarebbe quella di definire un nuovo costruttore personalizzato, specificando per che costruttore di "risorse di aggiornamento al completamento":

alt text http://www.cs.lth.se/EDA180/2005/Verktyg/eclipse_refresh.gif

+0

Sì, l'ho fatto. Ho anche fatto Project-> Clean. Sembra che l'obiettivo "Compile" di Maven debba essere invocato (vedi la mia risposta qui sotto), ma sono ancora molto incerto su come l'integrazione di Maven-Eclipse funzioni davvero. –

+0

haha ​​ha funzionato per me dopo poche pulizie e aggiornamento (su eclissi neon3). grazie! +1 – erginduran

21

m2eclipse non supporta questa. È necessario aggiungere manualmente la cartella target/generated-sources come cartella di origine. Quando comunichi a m2eclipse "Aggiorna configurazione progetto", questo verrà sovrascritto e dovrai ripristinarlo.

Inoltre, assicurarsi che Eclipse cerchi le modifiche nell'area di lavoro.

Ci potrebbero essere alcuni problemi, però. Alla fine, ti imbatterai in errori che alcune classi non possono essere compilate perché alcune altre classi non possono essere risolte. Il completamento del codice funzionerà, comunque. La causa principale di questo problema è che Eclipse si confonde quando Maven cambia file di classe in target.

Per risolvere questo problema, è necessario comunicare a Eclipse il compile to a different place than Maven.

+0

Link interessante. +1 – VonC

+0

Hm, interessante. Speravo che M2eclipse potesse solo modificare i processi di Eclipse e tutto funziona magicamente. :) –

+0

sopra il collegamento deve effettuare il login, ho questo link per la stessa ricerca https://docs.sonatype.org/display/M2ECLIPSE/Separate+Eclipse+and+Maven+output+folders – Reddy

12

Personalmente ho risolto questo problema impostando le classi generate come un progetto separato e ne ho fatto una dipendenza nel mio progetto principale (non generato). Stavo usando wsdl2java per generare classi di servizi web in modo che la "fonte" nel mio sottoprogetto fosse wdsl e xsds. Ha funzionato bene anche quando la wsdl cambiava regolarmente.

+0

Anche questa è una buona idea, penso. –

+0

Stavo cercando una soluzione migliore per evitare di farlo, ma sembra che non abbia una scelta. – WhyNotHugo

+0

+1 Suppongo che uno dei vantaggi di questo approccio è quello di non generare automaticamente le classi su base regolare durante la pulizia del progetto principale. In molte situazioni, le classi generate automaticamente rimangono statiche per gran parte della durata di un progetto. –

9

Ho riscontrato questo problema con il codice generato utilizzando Maven e wsdl2java ed ecco cosa ho fatto in Eclipse Juno per risolverlo.Assumere il mio progetto è denominato Project1:

  1. destro del mouse Progetto1 e selezionare Proprietà
  2. Scegli Java Build Path da sinistra e selezionare la scheda Librerie
  3. clic su Aggiungi cartella Classe
  4. selezionare lo scomparto directory e fare clic su OK (project1/target /-sources generati/bin)
  5. Fare clic su OK e aggiornare il progetto di

Come bonus aggiuntivo è anche possibile collegare il codice sorgente:

  1. Fare clic sulla freccia accanto alla nuova cartella della classe che hai appena creato
  2. Cliccare sulla attaccamento Fonte
  3. Fare clic sul pulsante Modifica
  4. impostare il percorso/project1/target /-sources generati/axis2/src
  5. Fare clic su OK
+2

+1 Si noti che è necessario abilitare l'aggiornamento automatico o manualmente è necessario aggiornare il progetto ogni volta che si esegue Maven dalla riga di comando. Altrimenti, otterrai errori davvero strani in Eclipse. –

+0

questo non ha risolto il problema –

19

m2eclipse supporta questo. In primo luogo, aggiungere il percorso al percorso di generazione:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <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> 

In secondo luogo, aggiungere il supporto per quella a M2E:

<pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.eclipse.m2e</groupId> 
      <artifactId>lifecycle-mapping</artifactId> 
      <version>1.0.0</version> 
      <configuration> 
       <lifecycleMappingMetadata> 
         <pluginExecutions> 
         <pluginExecution> 
          <pluginExecutionFilter> 
          <groupId>org.codehaus.mojo</groupId> 
          <artifactId>build-helper-maven-plugin</artifactId> 
          <versionRange>[1.0,)</versionRange> 
          <goals> 
           <goal>parse-version</goal> 
           <goal>add-source</goal> 
           <goal>maven-version</goal> 
           <goal>add-resource</goal> 
           <goal>add-test-resource</goal> 
           <goal>add-test-source</goal> 
          </goals> 
          </pluginExecutionFilter> 
          <action> 
          <execute> 
           <runOnConfiguration>true</runOnConfiguration> 
           <runOnIncremental>true</runOnIncremental> 
          </execute> 
          </action> 
         </pluginExecution> 
        </pluginExecutions> 
       </lifecycleMappingMetadata> 
      </configuration> 
     </plugin> 
    </plugins> 
</pluginManagement> 

Il secondo passo potrebbe non essere necessaria, se l'installazione di Eclipse ha installato il "org .eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml "plugin. Questo plugin è disponibile tramite Finestra -> Preferenze -> Maven -> Discovery. Attualmente, questo non funziona qui in Eclipse Kepler, quindi, ho recuperato il JAR (collegato dal xml mostrato nel Catalog URL) ed estratto i frammenti da org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml a mano.

+1

Sono stato in grado di fare questo lavoro sotto Luna aggiungendo il connettore M2E Apt nel Marketplace Eclipse e quindi seguendo il punto 1 sopra ma omettendo il passaggio 2. Grazie! – user2913094

1
  1. progetto pulsante destro del mouse e selezionare Proprietà
  2. Scegli Java Costruire Pathfrom sinistra e selezionare la scheda Origine
  3. clic su Aggiungi cartella
  4. Selezionare la directory bin e fare clic su OK
  5. (progetto/target/generate-sources/xxxx) Fare clic su OK e aggiornare il progetto
Problemi correlati