Maven: CoC Maven C onvention  O ver  C onfiguration V alerio  S chiavoni [email_address] Università Degli Studi Roma3 Javaday Roma - 02/12/2006
agenda cosa è maven key concepts cool features esempi di utilizzo Valerio Schiavoni  [email_address]  UniRoma3
cosa è maven un  semplice  build tool ?  build, test, package, document, deploy si ma più in generale: l'applicazione di  patterns   comuni all'infrastruttura di  build di un progetto Valerio Schiavoni  [email_address]  UniRoma3
do you know  your sources ? familiarità con un progetto difficile per il nuovo sviluppatore spesso è un inferno script  make o ant  custom  tanti modi di fare la stessa cosa senza convenzioni... Valerio Schiavoni  [email_address]  UniRoma3
come si usa maven installazione: scompattare un file zip configurazione: export MAVEN_HOME e poi:  da linea di comando:  mvn ... usando plugin per il vostro IDE (eclipse, netbeans, idea) Valerio Schiavoni  [email_address]  UniRoma3
key point: POM POM Developers Dependencies Plugins Organization Reporting Issue  Management Continuous Integration Source Control Management Mailing Lists Valerio Schiavoni  [email_address]  UniRoma3
cool features gestione dichiarativa delle dipendenze automazione delle attività più tipiche di ogni progetto  supporto nativo con sistemi di integrazione continua (CI) Valerio Schiavoni  [email_address]  UniRoma3
Dipendenze   <dependency>   <groupId>junit</groupId>   <artifactId> junit </artifactId>   <version>4.0</version>   <scope>test</scope>   </dependency> Valerio Schiavoni  [email_address]  UniRoma3
gestione delle dipendenze un semplice grafo delle dipendenze dipendenze dirette my app commons-a commons-b commons-c commons-d commons-e Maven (2) gestisce  automaticamente le dipendenze  transitive dipendenze transitive Valerio Schiavoni  [email_address]  UniRoma3
dove vengono risolte ? repository locale  repository remoto www.ibiblio.org/maven2 vari mirror www.mvnrepository.com http://maven.apache.org/archiva/ Valerio Schiavoni  [email_address]  UniRoma3
repositories dependency resolution local repository remote repository locale al  vostro pc da qualche parte sul web Valerio Schiavoni  [email_address]  UniRoma3
e con librerie  private  ? non tutto è open-source... è possibile installare localmente le librerie nel proprio repository locale vediamo come o referenziare direttamente la libreria di interesse sul file-system sconsigliato Valerio Schiavoni  [email_address]  UniRoma3
mvn install per installare la propria libreria: mvn  -Dfile=myLib.jar -DgroupId=foo  -DartifactId=bar -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true install Valerio Schiavoni  [email_address]  UniRoma3
cool features gestione dichiarativa delle dipendenze automazione delle attività tipiche di ogni progetto software supporto nativo con sistemi di integrazione continua (CI) Valerio Schiavoni  [email_address]  UniRoma3 Valerio Schiavoni  [email_address]  UniRoma3
attività tipiche : ovvero.. come compilate il vostro progetto ? e come eseguite i  test ? test di unità e di integrazione insieme ?  e come lo “ impacchettate ” ? war, jar, ear, zip, ... e i rilasci ? e il deploy? ? Valerio Schiavoni  [email_address]  UniRoma3
...ecco come! mvn compile mvn test mvn integration-test mvn package mvn site mvn release mvn deploy Maven Build  Lifecycle Valerio Schiavoni  [email_address]  UniRoma3
cool features gestione dichiarativa delle dipendenze automazione delle procedure tipiche di ogni progetto software supporto nativo con sistemi di integrazione continua (CI) Valerio Schiavoni  [email_address]  UniRoma3
CI: Continuum <scm> <connection> scm:svn:svn://svn.repo/proj/trunk </connection> </scm> <ciManagement> <notifiers> <type>email | irc | jabber | ..</type> <configuration>...</configuration> </notifiers> </ciManagement> checkout sorgenti gestione notifiche Valerio Schiavoni  [email_address]  UniRoma3
Continuum: web gui Valerio Schiavoni  [email_address]  UniRoma3
ma in pratica? creiamo in nostro primo progetto Maven usiamo un  archetype  maven è come applicare un “design pattern” al livello della struttura progetto the original pattern or model of which all things of the same type  are representations or copies Valerio Schiavoni  [email_address]  UniRoma3
esempio: blog-gui mvn archetype:create  -DgroupId=it.jugroma  -DartifactId=blog-gui Valerio Schiavoni  [email_address]  UniRoma3
esempio: blog-gui [INFO] Building Maven Default Project [INFO] Parameter: groupId, Value: it.jugroma [INFO] Parameter: packageName, Value: it.jugroma [INFO] Parameter: basedir, Value: ~/workspace [INFO] Parameter: package, Value: it.jugroma [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: artifactId, Value: blog-gui [INFO] Archetype created in dir:  /home/schiavoni/workspace/blog-gui [INFO] BUILD SUCCESSFUL Valerio Schiavoni  [email_address]  UniRoma3
esempio: blog-gui pom.xml directory src/ Valerio Schiavoni  [email_address]  UniRoma3
esempio: blog-gui mvn package  blog-gui.jar <project  xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;  xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0  http://maven.apache.org/maven-v4_0_0.xsd&quot;> <modelVersion>4.0.0</modelVersion> <groupId>it.jugroma</groupId> <artifactId>blog-gui</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies>..junit...</dependencies> </project> Valerio Schiavoni  [email_address]  UniRoma3
esempio: blog-gui src/ /main /java/ /it/jugroma/ App.java /test /java/ /it/jugroma/ AppTest.java Valerio Schiavoni  [email_address]  UniRoma3
esempio: blog-gui Aggiungiamo il supporto per lo sviluppo dentro Eclipse: genera per noi  .classpath  ,  .project Plugin Maven per Eclipse e non il contrario ! (vedremo dopo..) mvn eclipse:eclipse Valerio Schiavoni  [email_address]  UniRoma3
Maven2 & Eclipse Update Site:  http://m2eclipse.codehaus.org/ Valerio Schiavoni  [email_address]  UniRoma3
esempio 2: blog-web mvn archetype:create -DarchetypeGroupId= org.apache.maven.archetypes -DarchetypeArtifactId= maven-archetype-webapp -DgroupId=it.jugroma -DartifactId=blog-web Valerio Schiavoni  [email_address]  UniRoma3
esempio 2: blog-web mvn package  blog-web.war <project  ... <packaging>war</packaging>  ... </project> Valerio Schiavoni  [email_address]  UniRoma3
e ora che sapete tutto? Mailing-List: ~100 email /day sperimentate con i plugins ce n'è per tutti i gusti ed esigenze e scriverne uno è facilissimo contribuite al Mojo Project mojo.codehaus.org Contribuite alla documentazione !! Valerio Schiavoni  [email_address]  UniRoma3
domande ? Valerio Schiavoni  [email_address]  UniRoma3

Maven: Convention over Configuration

  • 1.
    Maven: CoC MavenC onvention O ver C onfiguration V alerio S chiavoni [email_address] Università Degli Studi Roma3 Javaday Roma - 02/12/2006
  • 2.
    agenda cosa èmaven key concepts cool features esempi di utilizzo Valerio Schiavoni [email_address] UniRoma3
  • 3.
    cosa è mavenun semplice build tool ? build, test, package, document, deploy si ma più in generale: l'applicazione di patterns comuni all'infrastruttura di build di un progetto Valerio Schiavoni [email_address] UniRoma3
  • 4.
    do you know your sources ? familiarità con un progetto difficile per il nuovo sviluppatore spesso è un inferno script make o ant custom tanti modi di fare la stessa cosa senza convenzioni... Valerio Schiavoni [email_address] UniRoma3
  • 5.
    come si usamaven installazione: scompattare un file zip configurazione: export MAVEN_HOME e poi: da linea di comando: mvn ... usando plugin per il vostro IDE (eclipse, netbeans, idea) Valerio Schiavoni [email_address] UniRoma3
  • 6.
    key point: POMPOM Developers Dependencies Plugins Organization Reporting Issue Management Continuous Integration Source Control Management Mailing Lists Valerio Schiavoni [email_address] UniRoma3
  • 7.
    cool features gestionedichiarativa delle dipendenze automazione delle attività più tipiche di ogni progetto supporto nativo con sistemi di integrazione continua (CI) Valerio Schiavoni [email_address] UniRoma3
  • 8.
    Dipendenze <dependency> <groupId>junit</groupId> <artifactId> junit </artifactId> <version>4.0</version> <scope>test</scope> </dependency> Valerio Schiavoni [email_address] UniRoma3
  • 9.
    gestione delle dipendenzeun semplice grafo delle dipendenze dipendenze dirette my app commons-a commons-b commons-c commons-d commons-e Maven (2) gestisce automaticamente le dipendenze transitive dipendenze transitive Valerio Schiavoni [email_address] UniRoma3
  • 10.
    dove vengono risolte? repository locale repository remoto www.ibiblio.org/maven2 vari mirror www.mvnrepository.com http://maven.apache.org/archiva/ Valerio Schiavoni [email_address] UniRoma3
  • 11.
    repositories dependency resolutionlocal repository remote repository locale al vostro pc da qualche parte sul web Valerio Schiavoni [email_address] UniRoma3
  • 12.
    e con librerie private ? non tutto è open-source... è possibile installare localmente le librerie nel proprio repository locale vediamo come o referenziare direttamente la libreria di interesse sul file-system sconsigliato Valerio Schiavoni [email_address] UniRoma3
  • 13.
    mvn install perinstallare la propria libreria: mvn -Dfile=myLib.jar -DgroupId=foo -DartifactId=bar -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true install Valerio Schiavoni [email_address] UniRoma3
  • 14.
    cool features gestionedichiarativa delle dipendenze automazione delle attività tipiche di ogni progetto software supporto nativo con sistemi di integrazione continua (CI) Valerio Schiavoni [email_address] UniRoma3 Valerio Schiavoni [email_address] UniRoma3
  • 15.
    attività tipiche :ovvero.. come compilate il vostro progetto ? e come eseguite i test ? test di unità e di integrazione insieme ? e come lo “ impacchettate ” ? war, jar, ear, zip, ... e i rilasci ? e il deploy? ? Valerio Schiavoni [email_address] UniRoma3
  • 16.
    ...ecco come! mvncompile mvn test mvn integration-test mvn package mvn site mvn release mvn deploy Maven Build Lifecycle Valerio Schiavoni [email_address] UniRoma3
  • 17.
    cool features gestionedichiarativa delle dipendenze automazione delle procedure tipiche di ogni progetto software supporto nativo con sistemi di integrazione continua (CI) Valerio Schiavoni [email_address] UniRoma3
  • 18.
    CI: Continuum <scm><connection> scm:svn:svn://svn.repo/proj/trunk </connection> </scm> <ciManagement> <notifiers> <type>email | irc | jabber | ..</type> <configuration>...</configuration> </notifiers> </ciManagement> checkout sorgenti gestione notifiche Valerio Schiavoni [email_address] UniRoma3
  • 19.
    Continuum: web guiValerio Schiavoni [email_address] UniRoma3
  • 20.
    ma in pratica?creiamo in nostro primo progetto Maven usiamo un archetype maven è come applicare un “design pattern” al livello della struttura progetto the original pattern or model of which all things of the same type are representations or copies Valerio Schiavoni [email_address] UniRoma3
  • 21.
    esempio: blog-gui mvnarchetype:create -DgroupId=it.jugroma -DartifactId=blog-gui Valerio Schiavoni [email_address] UniRoma3
  • 22.
    esempio: blog-gui [INFO]Building Maven Default Project [INFO] Parameter: groupId, Value: it.jugroma [INFO] Parameter: packageName, Value: it.jugroma [INFO] Parameter: basedir, Value: ~/workspace [INFO] Parameter: package, Value: it.jugroma [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: artifactId, Value: blog-gui [INFO] Archetype created in dir: /home/schiavoni/workspace/blog-gui [INFO] BUILD SUCCESSFUL Valerio Schiavoni [email_address] UniRoma3
  • 23.
    esempio: blog-gui pom.xmldirectory src/ Valerio Schiavoni [email_address] UniRoma3
  • 24.
    esempio: blog-gui mvnpackage blog-gui.jar <project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;> <modelVersion>4.0.0</modelVersion> <groupId>it.jugroma</groupId> <artifactId>blog-gui</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies>..junit...</dependencies> </project> Valerio Schiavoni [email_address] UniRoma3
  • 25.
    esempio: blog-gui src//main /java/ /it/jugroma/ App.java /test /java/ /it/jugroma/ AppTest.java Valerio Schiavoni [email_address] UniRoma3
  • 26.
    esempio: blog-gui Aggiungiamoil supporto per lo sviluppo dentro Eclipse: genera per noi .classpath , .project Plugin Maven per Eclipse e non il contrario ! (vedremo dopo..) mvn eclipse:eclipse Valerio Schiavoni [email_address] UniRoma3
  • 27.
    Maven2 & EclipseUpdate Site: http://m2eclipse.codehaus.org/ Valerio Schiavoni [email_address] UniRoma3
  • 28.
    esempio 2: blog-webmvn archetype:create -DarchetypeGroupId= org.apache.maven.archetypes -DarchetypeArtifactId= maven-archetype-webapp -DgroupId=it.jugroma -DartifactId=blog-web Valerio Schiavoni [email_address] UniRoma3
  • 29.
    esempio 2: blog-webmvn package blog-web.war <project ... <packaging>war</packaging> ... </project> Valerio Schiavoni [email_address] UniRoma3
  • 30.
    e ora chesapete tutto? Mailing-List: ~100 email /day sperimentate con i plugins ce n'è per tutti i gusti ed esigenze e scriverne uno è facilissimo contribuite al Mojo Project mojo.codehaus.org Contribuite alla documentazione !! Valerio Schiavoni [email_address] UniRoma3
  • 31.
    domande ? ValerioSchiavoni [email_address] UniRoma3

Editor's Notes

  • #2 Theme created by Sakari Koivunen and Henrik Omma Released under the LGPL license.