Creazione di progetti Java EE con Maven


13

Sto sviluppando app Web Java EE con Eclipse da circa un anno. Il mio datore di lavoro non usa Maven, ma più ne leggo, più sono convinto che Maven + Hudson sarà di grande beneficio per noi. Per prima cosa, però, devo familiarizzare con queste tecnologie nel mio tempo libero, in modo da poter creare una prova di concetto.

In questo momento, sono ancora un principiante Maven. Esiste una serie di best practice per la creazione di app Web Java EE con Maven? Ad esempio, potrei creare un progetto con un archetipo di base e quindi aggiungere tutti i JAR necessari inserendo dipendenze nel POM per il contenitore servlet, EJB, EclipseLink, ecc ... Potrebbe funzionare, ma potrebbe non essere il migliore modo di farlo. Apprezzerei molto ogni consiglio che potresti fornire su questo argomento.

Risposte:


10

Non preoccuparti degli archetipi fino a dopo

Per tutte le informazioni che devi sapere su Maven, leggi alcuni dei libri sul loro sito web . Tuttavia, è un po 'eccessivo per quello che stai cercando di ottenere.

Per iniziare, disponi la tua applicazione web seguendo la struttura Maven standard per le app web come segue. (Non hai bisogno di un archetipo Maven per questo, è solo un mucchio di cartelle standard, puoi farlo in 2 minuti).

  • src/main/java - contiene il codice Java di produzione
  • src/main/resources - contiene le risorse del percorso di classe di produzione (ad es. contesti di primavera)
  • src/main/webapp - (contiene WEB-INF / web.xml ma nessuna cartella lib)
  • src/test/java - contiene il codice Java di prova
  • src/test/resources - contiene le risorse di test (ad esempio feed XML di esempio per i test dei servizi Web ecc.)

Plugin di base

Il prossimo passo è scegliere un mucchio di plugin. I soliti sospetti sono, ovviamente, quelli che supportano clean, compilate e risorse (vieni come parte di Maven ma puoi configurarli). Quindi avrai il tester dell'unità surefire e il plugin WAR. È abbastanza per creare un'applicazione Web molto semplice.

Plugin più avanzati

Il prossimo passo è introdurre Findbugs e plugin PMD che forniranno al tuo codice un approfondimento e segnalino vari potenziali problemi. Probabilmente vorrai avere JXR per il riferimento del codice sorgente, taglist per tracciare TODO e tag REFACTOR e così via. Soprattutto...

... Usa il plugin Jetty per le applicazioni web

Utilizzare il plug-in Jetty per eseguire il file WAR all'interno dell'IDE per un debug semplice. È veloce e piccolo e fa il lavoro molto velocemente. Avere Jetty come parte della tua build Maven rende il tuo progetto in grado di essere testato su qualsiasi macchina senza bisogno di un IDE con qualche pannello Server complesso configurato. Consente inoltre di dichiarare dipendenze da altri file WAR, il che a sua volta significa che è possibile generare un ambiente di lavoro completo costituito da più applicazioni Web, tutte con un singolo comando "mvn clean jetty: run". Funziona ovunque e puoi persino fornire una configurazione JNDI di prova in modo che le tue origini dati con iniezione a molla siano tutte configurate esternamente. Se combini questo approccio Jetty con una pagina HTML dimostrativa standard (src/test/resources/demo.html) risparmierai una gran quantità di ore di sviluppo cercando di ottenere un ambiente locale funzionante. Un comando e il gioco è fatto. Semplice.

Configurazione del tuo IDE

Con Maven è facile poiché tutti i ragazzi grandi lo supportano: Eclipse, Netbeans e, ovviamente, il mio Intellij preferito. Basta puntare il tuo IDE su pom.xml e si occuperà di abbattere tutte le dipendenze elencate per te. Niente più confusione con WEB-INF/lib. In Eclipse, in genere si utilizza File | Importa ... | Progetto Maven | pom.xml.

Integrazione con Hudson

Prima installa Hudson (è solo una webapp) e poi scegli come target il tuo sistema di controllo della versione in modo che controlli la versione appropriata. Il tuo ultimo passo è configurarlo in modo che utilizzi Maven per fare la build. Ovviamente Maven dovrà essere installato sul tuo computer di costruzione (supponendo che sia diverso dal tuo computer di sviluppo).

Hudson esegue solo le build dell'istantanea

Chiedi a Hudson di eseguire build di istantanee e di lasciare le build di rilascio a un processo manuale. L'uso di questo approccio significherà che gli sviluppatori possono condividere il loro codice con una revisione dell'istantanea (ad es. 1.0.0-SNAPSHOT) e solo se è in grado di passare la build verrà condiviso nel repository del team. Tipicamente, Hudson eseguirà "mvn clean deploy" anche se l'inclusione dell'obiettivo "site" potrebbe anche far parte del processo poiché creerà un piccolo sito Web di progetto per ogni build. Gli sviluppatori del team includeranno automaticamente la build dell'istantanea aggiornata nel loro progetto attraverso il processo di gestione delle dipendenze Maven.

Hudson offre numerosi plug-in in grado di supportare tutti i tipi di metriche. Il mio preferito è tenere traccia del numero di test superati per progetto nel tempo. È fantastico mostrare alla direzione che il conteggio e la copertura del test unitario sono in costante aumento.

Guida generale alla configurazione

Dividi i tuoi repository almeno nella seguente struttura:

  • team-release - Tutti i tuoi manufatti di produzione rilasciati vanno qui
  • team-snapshot - Tutti i tuoi artefatti di sviluppo snapshot vanno qui
  • release di terze parti - Tutte le librerie di terze parti supportate vanno qui (ad es. Spring, Hibernate ecc.)

Gli account utente degli sviluppatori non dovrebbero essere in grado di scrivere nei repository del team, né istantanee né versioni. Ciò consentirebbe a uno sviluppatore di eludere Hudson se ha fretta e diventerà rapidamente la norma.

Assicurati di scaricare sempre le firme di origine, javadocs e SHA per tutte le terze parti. Jarvana è un eccellente esploratore di repository per tutte quelle classi difficili da trovare.

Prendi in considerazione l'installazione di un gestore di repository come Nexus o Artifactory per consentire un migliore controllo sul tuo repository in continua crescita.


2
Il sonar è anche abbastanza fantastico e si adatta bene con Maven / Hudson
Kevin

1
Assolutamente. In questo momento, se sto lavorando a un progetto Maven in una squadra, mi aspetto che un Findbugs / PMD locale rilevi rapidamente i problemi del killer, quindi un lavoro Sonar dopo una build Jenkins con distribuzione di artefatti su Nexus o Artifactory. Ciò fornisce una facile localizzazione degli artefatti e fornisce un'analisi dell'impatto ("dove usato") per quegli artefatti in tutto l'ecosistema del progetto. Insieme a Git, JIRA e Fisheye hai a disposizione un fantastico processo di sviluppo.
Gary Rowe,

1
Gary, il link pdf è scaduto
user1787812

1

Maven fornisce molti archetipi

mvn archetype:generate

stamperà un elenco di disponibili.

La differenza principale tra semplici archetipi Java con archetipi J2EE è che verranno generate directory per jsp e immagini. Se si avvia un nuovo progetto J2EE, considerare di utilizzarne uno dall'inizio.

Man mano che il tuo progetto cresce, puoi aggiungere più dipendenze. Personalmente preferisco iniziare con una raccolta minima di dipendenze (ad esempio l'archetipo di base J2EE) e quindi aggiungere gradualmente ciò di cui ho bisogno.


0

L'ho fatto partendo da un archetipo di base e aggiungendo tutti i bit, e sono abbastanza sicuro che non sia un ottimo modo. Ma trovo che sia imbarazzante anche dall'altra parte; selezionare ciò che è un buon archetipo è difficile a meno che tu non sia già "profondamente esperto nei segreti". È un po 'troppo simile alla tradizione magica (al contrario di informazioni tecniche rilevabili sensibili) per i miei gusti ...


E penso che sia una buona domanda. Vorrei avere una risposta migliore.
Donal Fellows

È molto apprezzato, signore.
Michael

0

Maven fornisce un modo per creare progetti da modelli chiamati Archetypes . Usa il comando mvn archetype:generateper sceglierne uno in modo interattivo . Puoi anche specificarne uno direttamente.

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-j2ee-simple \
    -DarchetypeVersion=1.0

Tutto su una riga.


0

Ho usato Maven e Hudson negli ultimi tre mesi. Mi aiuta a controllare la salute della base di codice in modo regale eseguendo tutti i test unitari, generando un rapporto di test. Puoi provare questo.
Puoi anche provare Spring Roo. È uno strumento RAD per la creazione di progetti J2EE basati su Spring.

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.