Strumenti Utente

Strumenti Sito


documentazione_3di_riservata:manuali_sviluppo:maven

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
documentazione_3di_riservata:manuali_sviluppo:maven [2015/08/25 09:28] – [Configurazione di maven] aalberghinidocumentazione_3di_riservata:manuali_sviluppo:maven [Data sconosciuta] (versione attuale) – eliminata - modifica esterna (Data sconosciuta) 127.0.0.1
Linea 1: Linea 1:
-====== Introduzione a maven ====== 
- 
-Maven è uno strumento nato per gestire i progetti Java. È in grado di occuparsi, se opportunamente configurato, della risoluzione delle dipendenze, della compilazione, dell'esecuzione dei test, della generazione degli artefatti, della reportistica, della documentazione del progetto e molto altro. 
-Il progetto maven dispone di un [[http://mvnrepository.com/ | repository pubblico centralizzato]] sul quale vengono caricati gli artefatti di diversi progetti (tipo apache-commons, log4j ecc.) che possono essere dichiarati come dipendenze del proprio progetto, facendo in modo che maven risolva la catena di dipendenze e scarichi in autonomia quanto gli è necessario per eseguire la build. 
- 
-===== Progetti, artefatti, SNAPSHOT e file pom.xml ===== 
- 
-Ogni progetto è identificato dai seguenti 2 parametri: 
- 
-  * groupId 
-  * artifactId 
- 
-Il primo è un identificativo univoco del produttore del software (per esempio, org.apache per la Apache Software Foundation), mentre l'artifactId identifica il singolo artefatto/progetto del gruppo (per esempio, commons per il progetto Commons della Apache Software Foundation). 
- 
-Ogni artefatto ha __necessariamente__ un numero di versione, per esempio 1.0.0. È possibile apporre il suffisso "-SNAPSHOT" al normale numero di versione per indicare a maven che la versione non è da ritenersi ancora stabile. Contrariamente agli altri artefatti dotati di numero di versione stabile (senza SNAPSHOT, in pratica), maven permette di __aggiornare__ gli artefatti SNAPSHOT: questo significa che scaricare lo stesso artefatto con la stessa versione SNAPSHOT in due momenti diversi potrebbe produrre risultati differenti, poiché l'artefatto potrebbe essere stato aggiornato nel mentre. 
- 
-Tutte queste informazioni (e molte altre) vengono immesse nel file **pom.xml** presente nella root directory del progetto, che rappresenta il modello del progetto e conterrà tutti i metadati necessari a maven per risolvere le dipendenze, compilarlo, eseguire i test, ecc. 
- 
-===== Build lifecycle e goals=====  
- 
-Il concetto di build di un progetto in maven è concepito come un "build lifecycle", ovvero un processo ben definito e standard per creare gli artefatti del progetto. Il lifecycle **default** comprende, tra gli [[https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference | altri]], i seguenti passaggi: 
-  - validate 
-  - compile 
-  - test 
-  - package 
-  - integration-test 
-  - verify 
-  - install 
- 
-Essendo il processo già noto e ben definito, il pom.xml non serve ad altro se non a specificare i parametri necessari ad eseguire tutte le varie fasi dei lifecycle. 
- 
-Nel caso in cui ci si appoggi a plugin aggiuntivi per creare gli artefatti del proprio progetto, è probabile che questi presentino dei loro step aggiuntivi che vanno ad aggiungersi ai passi della normale build: questi step prendono il nome di goal e si specificano solitamente nella forma **nome_plugin:nome_goal**. Un esempio può essere il seguente: 
-<code> 
-mvn clean dependency:copy-dependencies package 
-</code> 
-nel quale si indica a maven di eseguire il passo **clean**, seguito dal goal **copy-dependencies** del plugin **dependency**, seguito poi dal passo **package**. 
- 
- 
-Per ulteriori approfondimenti, consultare la sezione [[documentazione_3di_riservata:manuali_sviluppo:maven#riferimenti_esterni|riferimenti esterni]] in coda alla pagina. 
- 
- 
-====== Sonatype Nexus ====== 
- 
-[[http://www.sonatype.org/nexus/ | Nexus]] è un'applicazione web che consente, tra le altre cose, la creazione e la gestione di un repository maven accessibile tramite web. Oltre alla possibilità di caricare i propri artefatti e renderli disponibili ad altri, può essere configurato anche come cache-server del [[http://mvnrepository.com/ | repository centrale di maven]], rendendo più efficienti i processi di build in ambiti di reti locali. 
- 
-Un'istanza della versione Open (OSS) di Nexus è stata installata sul server ecatonchiro.bo.priv, ed è raggiungibile alla seguente [[http://ecatonchiro.bo.priv:8081/nexus | URL ]]. 
- 
-====== Configurazione di maven ====== 
- 
-Per potersi appoggiare al nostro server Nexus, è necessario configurare maven in modo da istruirlo su dove reperire gli artefatti. Per farlo è sufficiente modificare (o creare, se non già esistente) il file ''${HOME}/.m2/settings.xml'' (''%USERPROFILE%/.m2/settings.xml'' su Windows) col seguente contenuto: 
- 
-<code xml> 
-<?xml version="1.0"?> 
-<settings> 
-  <servers> 
-    <server> 
-      <id>deployment</id> 
-      <username>USERNAME</username> 
-      <password>PASSWORD</password> 
-    </server> 
-  </servers> 
-  <mirrors> 
-    <mirror> 
-      <!--This sends everything else to /public --> 
-      <id>nexus</id> 
-      <mirrorOf>*</mirrorOf> 
-      <url>http://ecatonchiro:8081/nexus/content/groups/public</url> 
-    </mirror> 
-    <mirror> 
-      <id>nexus_releases</id>                                                                                                                                                                                          
-      <mirrorOf>*</mirrorOf>                                                                                                                                                                                           
-      <url>http://ecatonchiro:8081/nexus/content/repositories/releases/</url>                                                                                                                                          
-    </mirror>                                                                                                                                                                                                          
-    <mirror>                                                                                                                                                                                                           
-      <id>nexus_snapshots</id>                                                                                                                                                                                         
-      <mirrorOf>*</mirrorOf>                                                                                                                                                                                           
-      <url>http://ecatonchiro:8081/nexus/content/repositories/snapshots/</url>                                                                                                                                         
-    </mirror>                                                                                                                                                                                                          
-  </mirrors>                                                                                                                                                                                                           
-  <profiles>                                                                                                                                                                                                           
-    <profile> 
-      <id>nexus</id> 
-      <!--Enable snapshots for the built in central repo to direct --> 
-      <!--all requests to nexus via the mirror --> 
-      <repositories> 
-        <repository> 
-          <id>central</id> 
-          <url>http://central</url> 
-          <releases> 
-            <enabled>true</enabled> 
-          </releases> 
-          <snapshots> 
-            <enabled>true</enabled> 
-          </snapshots> 
-        </repository> 
-      </repositories> 
-      <pluginRepositories> 
-        <pluginRepository> 
-          <id>central</id> 
-          <url>http://central</url> 
-          <releases> 
-            <enabled>true</enabled> 
-          </releases> 
-          <snapshots> 
-            <enabled>true</enabled> 
-          </snapshots> 
-        </pluginRepository> 
-      </pluginRepositories> 
-    </profile> 
-  </profiles> 
-  <activeProfiles> 
-    <!--make the profile active all the time --> 
-    <activeProfile>nexus</activeProfile> 
-  </activeProfiles> 
-</settings> 
-</code> 
- 
-Come si può notare, è anche presente una sezione deployment all'inzio del file: immettendo le proprie credenziali LDAP al posto di USERNAME e PASSWORD, sarà possibile eseguire __direttamente__ il deploy degli artefatti sul nostro repository Nexus specificando il lifecycle **deploy** durante la build, e.g: 
-<code> 
-mvn deploy 
-</code> 
- 
-====== Riferimenti esterni ====== 
- 
-[[http://mvnrepository.com/ | Repository centrale di maven]] 
- 
-[[https://maven.apache.org/what-is-maven.html | Documentazione ufficiale di maven]] 
- 
-[[https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html | Introduzione ai lifecycle di maven ]] 
- 
-[[http://www.sonatype.org/nexus/ | Sito web di Sonatype Nexus]] 
- 
-[[http://ecatonchiro.bo.priv:8081/nexus/| Sito del repository Nexus 3DI]] 
- 
- 
  
/data/attic/documentazione_3di_riservata/manuali_sviluppo/maven.1440487735.txt.gz · Ultima modifica: (modifica esterna)