lunedì 19 settembre 2011

Una migliore integrazione Maven porta a conseguenze impreviste (bug)


Questa settimana, ero di fronte a quello che sembrava un problema quasi insormontabile. Sono stato chiamato da uno dei miei dev: appena aggiornato il suo Eclipse (o più precisamente, il nostro già configurato Eclipse), non poteva distribuire a Tomcat attraverso WTP. Ecco i passaggi che ho svolto per risolvere il problema e pensieri più generale sull'aggiornamento e utensili.
Il registro mostrato un ClassNotFoundException, uno che coinvolgono primavera. Così, il primo passo è guardare sotto il cofano. Fornita è stata utilizzata la configurazione predefinita - per usare i metadati di lavoro - dovrebbe essere posto sotto <WORKSPACE> / .metadata / .plugins / org.eclipse.wst.server.core / tmp <i> / wtpwebapps WORKSPACE dove è il vostro luogo di lavoro e i è un numero che inizia con 0 incrementale assegnato da Eclipse per ogni server applicazioni virtuale in WTP. Si dovrebbero vedere le applicazioni distribuite in Eclipse. Quando ho controllato, ho capito l'applicazione è stata implementata bene, ma ha trovato alcuna cartella WEB-INF/lib.
Avevo già avuto problemi di distribuzione, ad esempio: ho risolto forzando prima pubblicazione (tasto destro del mouse sul server e scegli Pubblica) e, se non con successo, la pulizia (rimuove tutti i deployment e riparte da zero). Bene, questo non ha funzionato.
Inoltre, a volte le classi non vengono distribuiti perché non ci sono in primo luogo: la compilazione non avviene (a causa del cattivo codice o Eclipse può essere giocoso) e questo impedisce la generazione di file di classe.. Questo non mi sembrava il problema, ma l'inferno, questo era un vantaggio come le altre. Al fine di costringere la compilazione, pulire e controllare il progetto ricompilare dopo (o assegno creazione automatica è accesa). Questo non ha funzionato troppo ...
E 'successo prima che la chiusura del progetto e la riapertura è risolto alcuni codici sono collegati a problemi di compilazione. Chiusura e riavviare Eclipse può produrre gli stessi risultati. Ho fatto entrambi senza alcun risultato. A questo punto, mi ha deluso perché tutti i passaggi precedenti avrebbe dovuto risolvere il problema ... ancora non avevano.
Dato che il progetto ha utilizzato Maven (e abbiamo avuto m2eclipse installato), ho anche controllato il Maven Dipendenze biblioteca è stata correttamente indicata: era. Giusto per essere sicuro, ho disabilitato e riattivato la gestione delle dipendenze. Indovinate un po? Nulla è cambiato.
Disperato, ho disperatamente sfogliare le POM e le seguenti attirato la mia attenzione:
1.plug-in >
2.artifactId > maven-guerra-plugin </ artifactId >
3.configurazione >
4.packagingExcludes > WEB-INF/lib / *. jar </ packagingExcludes >
5.</ configurazione >
6.</ plug-in >
Questa configurazione crea WAR magro in modo che le biblioteche non sono confezionati in guerra ma si trovano nel EAR, a condizione che si fa riferimento, ovviamente (per il modo giusto per creare tali guerre, vedi il mio post della scorsa settimana). Con un debole barlume di speranza, ho rimosso la parte di configurazione e ha funzionato, le librerie sono state finalmente distribuito.
Sì, cari lettori, a quanto pare le nuove versioni del plugin m2eclipse sono in grado di analizzare alcune parti del POM che non sono stati analizzati prima e agire di conseguenza. Anche se questa è una buona notizia, in generale, significa che dobbiamo controllare con attenzione sui potenziali effetti collaterali di aggiornamento con le versioni più recenti.Naturalmente, questo era stupido di aggiornare, in primo luogo, ma penso che a volte è obbligatorio per un progetto più recente.
Tuttavia, il problema è molto più diffusa di quanto m2eclipse. E 'molto simile a questioni indirizzato a Andrew Spencer messaggio , solo tanto più che se non l'aggiornamento, potremmo tenere una istanza di Eclipse per ogni progetto, che deve essere condiviso tra tutti i membri del team. In questo momento, non ho alcuna soluzione per questo problema, oltre a modificare il codice per mantenere in sincronia con lo strumento.
PS: dato che abbiamo ancora voluto avere WAR magro, ho solo spostato la parte di configurazione in un profilo ... che era quello che era configurata nel archetipo fornito dal team di supporto.

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.