2011-12-13 14 views
16

Ho un progetto Maven multi-modulo che fa uso di sovrapposizioni WAR (stack di loro 3 in profondità). Tutto funziona alla grande in Maven, ma non riesco a lanciare la mia WAR da Eclipse perché si lamenta di non trovare vari file.Come gestire gli overlay di WAR Maven in Eclipse?

Come posso configurare Eclipse (e un programma di avvio) in modo che possa eseguire il mio WAR da Eclipse senza dover prima installare Maven? Dovrei aggiungere che i miei progetti di Eclipse WAR non sono progetti web dinamici ... è una parte di ciò che devo fare?

NOTA: la seguente domanda tocca l'oggetto, ma la risposta indica che è necessario eseguire sempre prima un'installazione di Maven e so che non può essere corretto perché ci sono persone che usano Eclipse senza Maven.

Maven overlays and Eclipse

ho trovato anche questo che mi fa pensare che non è possibile tramite M2E vaniglia:

http://jira.codehaus.org/browse/MNGECLIPSE-599

risposta

18

ero in grado di raggiungere questo obiettivo e tutto funziona alla grande. Ecco cosa fare:

Prima di tutto è necessario il plug-in M2E Eclipse, necessario per consentire a Eclipse di riconoscere e aggiornare automaticamente le dipendenze Maven. Fornisce anche un bel editor grafico POM. Alla fine del 2011, il progetto M2Eclipse è stato donato alla fondazione Eclipse da Sonatype e ora viene chiamato semplicemente M2E. Tuttavia, non è ancora fornito con l'edizione Java EE di Eclipse Indigo e deve essere installato separatamente tramite il loro sito di aggiornamento

In passato, l'integrazione tra Eclipse e Maven è stato un po fastidioso. Tuttavia, questa nuova integrazione Maven basata su Eclipse è ora consapevole del fatto che ci sono molti plug-in Maven utilizzati nei file POM e che solo determinati obiettivi di determinati plug-in hanno senso all'interno di un ambiente IDE. Inoltre, quegli obiettivi che hanno senso quando si esegue all'interno di un IDE potrebbero richiedere una configurazione speciale. Per gestire correttamente questo M2E ora supporta la nozione di "connettore"

M2E ha una lunga lista di connettori speciali che gli permettono di fare la "cosa giusta" quando invoca vari mojos (obiettivi del plugin Maven). Per visualizzare l'elenco dei connettori disponibili in Eclipse, vai alla finestra di dialogo Preferenze e seleziona Maven-> Dicovery-> Apri catalogo. Questi connettori dovrebbero essere installati automaticamente quando vengono rilevati all'interno di un file {{pom.xml}} durante l'importazione del progetto. Tuttavia, ciò richiede la versione corretta della procedura guidata di importazione M2E Maven (che Indigo non ha fino a SR2).

Inoltre, a volte questi connettori sono difettosi e abbiamo bisogno di utilizzare i siti di aggiornamenti notturni o beta per ottenere le ultime correzioni. Se si dispone di una versione precedente o difettosa, è necessario eliminare e reimportare i progetti dopo l'aggiornamento. Per questi motivi, a mio parere, tutti i connettori M2E dovrebbero essere installati a mano prima di importare il progetto in Eclipse.

Il connettore M2E-WTP è quello necessario per far funzionare gli overlay di WAR nei lanciatori Eclipse per "Server" di Eclipse. Questo connettore viene utilizzato per integrare Maven con WTP ... e quindi gestisce gli overlay WAR, l'impostazione del contenitore servlet, la configurazione WTP di Eclipse, l'impostazione del contesto root e altre cose che rendono tutti gli strumenti Web di Eclipse "Just Work" quando un modulo Maven WAR viene importato in Eclipse come progetto.

Il sito di aggiornamento per il connettore M2E-WTP è: http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/

Aggiungi questo sito M2E-WTP e installare il connettore. Si noti tuttavia che né M2E né il connettore M2E-WTP metteranno le dipendenze della sovrapposizione WAR nella WAR finale. È necessario farlo aggiungendo le dipendenze richieste al pom.xml finale di WAR. Non so perché gli strumenti non lo facciano, ma non lo fanno, quindi passaci sopra. ;-)

A questo punto, vorrei anche raccomandare un aggiornamento completo tramite {{Aiuto-> Verifica aggiornamenti}}. Una volta fatto questo, dovresti essere in grado di aggiungere semplicemente un server Eclipse, fare clic sul tuo progetto (non quello di overlay, ma uno normale) e scegliere "Esegui sul server ...".

Le modifiche apportate a WAR o overlay WAR verranno automaticamente pubblicate sul server. Le modifiche Javascript sono pubblicate senza riavviare il server ... tutto ciò che devi fare è premere refresh nel browser per vedere il nuovo codice in esecuzione.

secondo aggiornamento: c'è un bug (https://issues.sonatype.org/browse/MECLIPSEWTP-174) in M2E che può risultare nella directory lib WEB-INF/accidentalmente perdere tutti i suoi file JAR. Quando ciò accade, ovviamente l'applicazione servlet non verrà avviata. La soluzione alternativa è pulire il server facendo clic destro sul server e selezionando "pulito". Si noti che la pulizia della directory di lavoro da sola non ripristinerà questi JAR mancanti.

+0

Contento di aver trovato questa risposta. Ma non funziona per me. Ho provato un caso molto semplice: un semplice progetto di guerra A, un semplice progetto di guerra B e pom A dichiara guerra B come una dipendenza, ma in realtà non usa alcuna classe da B - in questo caso 'mvn install' viene eseguito con successo, con il sovrapposizione del progetto B aggiunto alla guerra A come previsto. Ma se aggiungo nel progetto A qualche riferimento a una classe da B, vedo due problemi: (1) eclipse non può risolvere il riferimento alla classe da B. (2) 'mvn install' (da eclipse o dalla riga di comando) fallisce con errore di compilazione su ogni posto nel codice A in cui faccio riferimento alla classe da B. – rapt

+1

L'installazione del connettore come suggerito non ha risolto questi problemi. Cosa mi manca qui? – rapt

+0

"Nota comunque che né M2E né il connettore M2E-WTP metteranno le dipendenze della sovrapposizione WAR nella finale WAR". Sto avendo questo problema esatto, conosci qualche altro lavoro in giro. Quello che hai fornito non funzionerà sul mio caso. – Hoffmann

Problemi correlati