Browsing
Information
Calendar
Date
desc





/doc/Maven

TOC

Maven

Maven (http://maven.apache.org/) è uno strumento open source in licenza Apache per facilitare il processo di build di progetti Java. Ha raggiunto la versione 2.0.1, il numero di versone indica una riscrittura del progetto dopo il successo e l'esperienza maturata con la prima versione. La seconda versione non e' ancora da consierarsi stabile, viene ancora mantenuta anche la versione 1.x considerata stabile.

In questo documento prenderemo a riferimento la versione 2.0.1.

Concetti

Questi sono i concetti fondamentali dello strumento Maven:

  • Project, progetto è il concetto chiave di Maven. Un descrittore XML delle caratteristiche e dipendenze di un progetto java. Il progetto base è quello per la costruzione (build) di Java.
  • Repository, contenitore locale o remoto di dipendenze (jar) necessari al build.
  • Dependence, descrittore di un jar necessario al processo di build.
  • Archetype, template per la modellazione standard di progetti specializzati. Archetipo tipo è quello del progetto di un JAR, ma ne esistono di pronti, ad esempio per WAR, EAR ed altri.

Note

nota 1

... definitivamente abbandonata la strada del deploy-file (finchè non sarà rilasciata e supportata opportunamente da maven) ho trovato costui che ha descritto il "suo" modo di fare il deploy:

http://www.mail-archive.com/users@maven.apache.org/msg30408.html

in sostanza, tramite un POM facilmente riusabile e un "mvn deploy", scompatta il jar di terza parte in /target e quindi fa tutto il ciclo di packaging + deploy del jar mediante maven.

nota 2

Per compilazione di molti file con maven e' necessario impostare la variabile di ambiente:

  MAVEN_OPTS=-Xmx512m 

Questo esmpio imposta lo heap a 512 megabyte.

nota 3

Sono riuscito a farmi un'idea di un possibile uso: in src/main/resources ho i miei file di configurazione (file di properties ad esempio), poi ho N file di filtro organizzati a seconda dell'environment di build (test, produzione, ecc), quindi a seconda di un parametro che passo nel comando di build vado ad usare i filtri di uno o dell'altro environment che mi "personalizzano" i file di properties che produco nel target e quindi nel war.
Che ne pensi?

Inoltre ho notato qualche piccolo problema di fondo:

  • i file "resources" sono sempre "compilati" (con eventuale filtro) nella cartella target/classes. Il packaging war li mette poi in WEB-INF/classes dentro il file war. Noi invece siamo soliti avere questi file nella "root" del war, e non so se sia possibile (facilmente) digli di metterli lì...
    A dire il vero non so se sia nemmeno tanto corretto rispetto alle specifiche del war format, ma non ho trovato molta documentazio a proposito...
  • in realtà noi usiamo anche un war "particolare" che non include i file statici (html and so on)... Come la gestiamo la cosa? Dobbiamo "splittare" il packaging prevedendo anche il file zip? boh...

nota 3 (Michele Lorenzini)

Maven è uno strumento che permette di gestire i vari aspetti legati allo sviluppo
di un progetto, ma a differenza di ant lo fa a un livello di "astrazione" maggiore
e si occupa di vari aspetti.

Maven si basa sul concetto di "fasi di sviluppo" standard a cui sono associate
le varie attività (dalla compilazione, al test, al packaging, al deploy, ecc).
"Suggerisce" (e in parte obbliga) una forte standardizzazione del layout delle
directory di progetto che consente una facile condivisione degli stessi e l'automatizzazione
dei vari task di sviluppo.
Consente comunque la personalizzazione e l'aggancio di "plugin" di vario genere,
anche di propria implementazione, e può comunque agganciare task ant.

Cosa molto interessante, implementa un meccanismo standard di gestione delle dipendenze
tra progetti e librerie (jar ecc) che consente di disporre di repository condivisi (ad es repository
aziendali o di accesso libero in internet) da cui recuperare automaticamente i file
necessari per le varie fasi di sviluppo.

Vi sono anche implementazioni (in parte in corso) di plugin sia per Eclipse che Netbeans
che permettano di integrare la gestione del progetto direttamente nell'IDE.

ecc ecc..

Maven 2 è una "recente" revisione che ha rivisto completamente l'implementazione
dello strumento rispetto a Maven 1, ha un pò la pecca di essere ancora giovane e quindi in parte poco
(o male) documentato o in fase di sviluppo in alcune sue parti, ma è senz'altro uno strumento molto
efficace e comodo per vari aspetti

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.
Add your comment