Il progetto Java: Maven, Jersey, Jetty, Tomcat
Per gestire il nostro progetto sfrutteremo Maven. Quindi da terminale eseguiamo il comando:
$ mvn -B archetype:generate \
-DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=it.html.tutorial.library \
-DartifactId=library
Nella directory library
è stato creato il nostro progetto con alcune directory di base. Eliminiamo /src/main/webapp/WEB-INF/
ed aggiungiamo /src/main/java/
, ne approfondiremo le motivazioni più avanti.
Procediamo con l'aggiunta della dipendenza a Jersey. Editiamo il file pom.xml
, presente nella directory principale del nostro progetto ed aggiungiamo all'interno del tag <dependencies>
le righe:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.23.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.23.2</version>
</dependency>
Inoltre dobbiamo configurare il progetto per consentire l'utilizzo di Jetty. All'interno dei tag <build>
aggiungiamo il plugin di Jetty.
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.11.v20160721</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
A questo punto possiamo iniziare a compilare il progetto in modo da scaricare le dipendenze configurate e verificare che sia tutto funzionante. Da terminale eseguiamo:
$ mvn package
Il comando package
scarica le dipendenze e le installa sul repository Maven locale. Ciò consentirà di avviare il progetto con Jetty tramite il comando:
$ mvn jetty:run
Non ci resta che verificare che il progetto sia up-and-running. Se tutto è andato per il verso giusto, collegandoci alla URL:
http://localhost:8080
dovremmo visualizzare la pagina "Hello World!":
Nella cartella target/
troveremo il file library.war
, cioè il compilato del nostro progetto che potremmo utilizzare per il deploy su un Application Server come Tomcat.
Approfondimenti
In prima istanza abbiamo creato lo scheletro del progetto con Maven in modalità non interattiva passando l'opzione -B
, specificando quindi le opzioni tramite riga di comando. Il progetto Maven viene gestito tramite file pom.xml
. POM sta per Project Object Model, un progetto Maven è descritto attraverso di esso: informazioni generali, dipendenze, processo di compilazione e fasi secondarie come la generazione di documentazione. Maven crea la struttura delle directory di base, navigando il progetto troveremo infatti:
/src/main/webapp
/src/main/resources
La prima contiene i sorgenti Web, i file JSP, HTML, JS e la directory WEB-INF, con il file web.xml
il deployment descriptor del progetto Java. Quest'ultimo possiamo eliminarlo in quanto utilizzeremo la specifica delle Servlets 3.0, sfruttando quindi le annotation. La seconda directory contiene le risorse che vogliamo rendere disponibili all'interno dell'applicazione: file di testo e properties di configurazione. Per ospitare il codice sorgente delle classi java abbiamo aggiunto la directory /src/main/java/
.
Successivamente abbiamo editato il file pom.xml
di Maven lavorando sulla dipendenze. La prima dipendenza è l'implementazione del core
di Jersey per la specifica delle Servlets 3.x. La seconda è il modulo che fornisce il supporto alle entità JSON, MOXy che utilizzeremo.
Abbiamo poi aggiunto il plugin di Jetty che ci consentirà un test rapido in fase di sviluppo. Esso effettua periodicamente uno scan del progetto per verificare eventuali cambiamenti ed eventualmente riesegue il deploy in automatico. Jetty fornisce una serie di goal fra cui jetty:run
per l'avvio del progetto. Per vedere tutti i goal Maven messi a disposizione dal plugin Jetty è possibile usare:
mvn jetty:help
Inoltre abbiamo aggiunto il plugin che si occupa della generazione del pacchetto WAR specificando di non sollevare errori non trovando il file web.xml
, ed il plugin che si occupa della compilazione impostando il target di compilazione alla versione di Java 1.8.
Prima di avviare Jetty abbiamo però eseguito la phase package
che serve a compilare il progetto e produrre il pacchetto a seconda delle informazioni specificate nel file di configurazione.