Lorraine JUG (1st June, 2010) - Maven

2,498
-1

Published on

Overview of Maven and its concepts
Maven, and the future of Maven 3.x
Maven and its ecosystem
Good and bad practices
Usecases

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,498
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
63
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Lorraine JUG (1st June, 2010) - Maven

  1. 1. Apache Maven – LorraineJUG June 1st, 2010 Arnaud Héritier eXo Platform Software Factory Manager
  2. 2. Arnaud Héritier •  Software Factory Manager eXo platform »  In charge of tools and methods •  Committer since 2004 and member of the Project Management Committee •  Coauthor of « Apache Maven » published by Pearson (in French) •  Contact me : »  http://aheritier.net »  Twitter : @aheritier »  Skype : aheritier 2
  3. 3. Apache Maven CHOOSE YOUR MENU
  4. 4. Overview •  Definition •  Maven or not Maven, History •  that is the question ! •  Concepts »  Conventions » Maven, the project »  POM choice »  Reactor and Modules » Maven, the corporate »  Inheritance »  Artifact Repository choice »  Dependency » Competitors »  Version »  Profiles »  Build Lifecycle And Plugins 4
  5. 5. Back to the future •  Maven 2.x •  Maven 3.x •  Community 5
  6. 6. Ecosystem •  Repository Managers •  Continuous Integration •  Quality Management •  IDE » Tests Automation » Eclipse » Quality Metrics Reports » Idea IntelliJ » Project Reports » Netbeans » Sonar 6
  7. 7. Good & Bad Practices •  K.I.S.S. •  Project Organization •  POM •  Development 7
  8. 8. Usecases •  Secure your credentials •  Build a part of your project using reactor options •  Automate your release process » (at least the technical part) •  Setup a global mirror 8
  9. 9. Apache Maven OVERVIEW
  10. 10. Definition •  Apache Maven is a software project management and comprehension tool. •  Based on the concept of a project object model (POM) » Maven can manage a project's build, binaries, reporting and documentation from a central piece of information. 10
  11. 11. History •  Initiated in 2001 by Jason Van Zyl in Alexandria, an Apache Jakarta project, •  Moved to Turbine few months after, •  Became a Top Level Project in 2003. •  Maven 2.0 released in September 2005 •  Maven 3.0 … coming soon !!! 11
  12. 12. Apache Maven CONCEPTS 12
  13. 13. Conventions •  1 project = 1 artifact (pom, jar, war, ear, …) •  Standardized »  project descriptor (POM) »  build lifecycle »  directories layout •  *.java to compile in src/[main|test]/java •  *.xml, *.properties needed in classpath and to bundle in archive in src/[main|test]/resources •  target directory for generated stuffs (sources, classes, …) •  … 13
  14. 14. POM •  An XML file (pom.xml) <?xml version="1.0" encoding="UTF-8"?>! <project>! <modelVersion>4.0.0</modelVersion>! <groupId>net.aheritier.samples</groupId>! •  Describing <artifactId>simple-webapp</artifactId>! <version>1.1-SNAPSHOT</version>! » Project identification <packaging>war</packaging>! <name>Simple webapp</name>! » Project version <inceptionYear>2007</inceptionYear>! <dependencies>! » Project description <dependency>! <groupId>org.springframework</groupId>! » Build settings <artifactId>spring-struts</artifactId>! » Dependencies <version>2.0.2</version>! </dependency>! » … ...! </dependencies>! </project>! 14
  15. 15. Reactor •  Split your project in sub-modules <project>! ...! •  Maven computes the <modules>! build order from <module>moduleA</module> ! dependencies <module>moduleB</module> ! between sub- <module>moduleC</module> ! modules. <module>moduleD</module> ! <module>moduleE</module> ! •  Modules have to be <module>moduleF</module> ! defined in the POM </modules>! ...! »  No auto-discovery for </project>! performance reasons 15
  16. 16. Inheritance •  Share settings between projects/modules •  By default the parent project is supposed to be in the parent directory (../) <parent>! <groupId>net.aheritier.sample</groupId>! <artifactId>my-parent</artifactId>! <version>1.0.0-SNAPSHOT<version>! </parent>! 16
  17. 17. Inheritance Use a technical inheritance to organize sub-modules Use assembly to package batchs Insert README in all artifacts Use clirr to validate backward compatibility 17
  18. 18. Artifact Repository 18
  19. 19. Artifact Repository •  By default Maven downloads artifacts required by the project or itself from central •  Downloaded artifacts are stored in the local repository •  Used to store : »  Project’s binaries »  Project’s dependencies »  Maven and plug-ins binaries 19
  20. 20. Dependencies Without Maven With Maven 20
  21. 21. Dependencies •  Declaratives » groupId + artifactId + version (+ classifier) » Type (packaging) : jar, war, pom, ear, … •  Transitives » Lib A needs Lib B » Lib B needs Lib C » Thus Lib A needs Lib C 21
  22. 22. Dependencies •  Scope »  Compile (by default) : Required to build and run the application »  Runtime : not required to build the application but needed at runtime •  Ex : taglibs »  Provided : required to build the application but not needed at runtime (provided by the container) •  Ex : Servlet API, Driver SGBD, … »  Test : required to build and launch tests but not needed by the application itself to build and run •  Ex : Junit, TestNG, DbUnit, … »  System : local library with absolute path •  Ex : software products 22
  23. 23. Dependencies •  Define all dependencies you are using » and no more ! •  If you have optional dependencies » Perhaps you should have optional modules instead •  Cleanup your dependencies with » mvn dependency:analyze! •  Study your dependencies with » mvn dependency:tree! » mvn dependency:list! 23
  24. 24. Versions •  Project and dependency versions •  Two different version variants » SNAPSHOT version •  The version number ends with –SNAPSHOT •  The project is in development •  Deliveries are changing over the time and are overridden after each build •  Artifacts are deployed with a timestamp on remote repositories » RELEASE version •  The version number doesn’t end with –SNAPSHOT •  Binaries won’t change 24
  25. 25. Versions 25
  26. 26. Versions •  About SNAPSHOT dependencies »  Maven allows the configuration of an update policy. The update policy defines the recurrence of checks if there is a new SNAPSHOT version available on the remote repository : •  always •  daily (by default) •  interval:X (a given period in minutes) •  never »  Must not be used in a released project •  They can change thus the release also  •  The release plugin will enforce it  26
  27. 27. Versions •  Range » From … to … » Maven automatically searches for the corresponding version (using the update policy for released artifacts) » To use with caution •  Risk of non reproducibility of the build •  Risk of side effects on projects depending on yours. 27
  28. 28. Versions •  Usethe versions plugin to update all versions of your project and its modules mvn versions:set –DnewVersion=A.B.C-SNAPSHOT! 28
  29. 29. Profiles •  Allow to modify the default behavior of Maven by overriding/adding some settings •  Use mvn help:active-profiles to debug •  Explicit activation or deactivation mvn <phases or goals> ! -PprofileId1,-profileId2 ! -P!profileId3! 29
  30. 30. Profiles ●  activeByDefault = If no other profile is activated ●  Activation through Maven settings <settings>! ...! <activeProfiles>! <activeProfile>profile-1</activeProfile>! </activeProfiles>! ...! </settings>! 30
  31. 31. Profiles •  Activation based on environment variables <profiles>! <profiles>! <profile>! <profile>! <activation>! <activation>! <property>! <property>! <name>run-its</name>! <name>!skip-enforce</name>! <value>true</value>! </property>! </property>! </activation>! </activation>! ...! ...! </profile>! </profile>! </profiles>! </profiles>! 31
  32. 32. Profiles •  OS / Java settings <profiles>! <profile>! <profiles>! <activation>! <os>! <profile>! <name>Windows XP</name>! <activation>! <family>Windows</family>! <jdk>[1.3,1.6)</jdk>! <arch>x86</arch>! </activation>! <version>5.1.2600</version>! ...! </os>! </profile>! </activation>! </profiles>! ...! </profile>! </profiles>! 32
  33. 33. Profiles •  Activation on present or missing files <profiles>! <profile>! <activation>! <file>! <missing>${project.build.directory}/generated-sources/ axistools/wsdl2java/</missing>! </file>! </activation>! ...! </profile>! </profiles>! 33
  34. 34. Build Lifecycle And Plugins •  Plugin based architecture for a great extensibility •  Standardized lifecycle to build all types of archetypes 34
  35. 35. Build Lifecycle And Plugins Default Lifecycle Clean Lifecycle Site Lifecycle validate pre-clean pre-site initialize clean site generate-sources post-clean post-site process-sources site-deploy generate-resources process-resources compile process-classes generate-test-sources process-test-sources generate-test-resources process-test-resources test-compile process-test-classes test prepare-package package pre-integration-test integration-test post-integration-test verify install deploy 35
  36. 36. Build Lifecycle And Plugins •  Many plugins »  Packaging »  Reporting »  IDE integration »  Miscellaneous tools integration •  Many locations »  maven.apache.org »  mojo.codehaus.org »  code.google.com »  … Take care while selecting them !!! 36
  37. 37. Apache Maven MAVEN OR NOT MAVEN, THAT IS THE QUESTION ! 37
  38. 38. Maven, the project’s choice •  Application’s architecture »  The project has the freedom to divide the application in modules »  Maven doesn’t limit the evolution of the application architecture •  Dependencies management »  Declarative : Maven automatically downloads them and builds the classpath »  Transitive : We define only what the module needs itself 38
  39. 39. Maven, the project’s choice •  Centralizesand » Builds automates all » Tests development facets » Packages (build, tests, releases) » Deploys » Documents •  Onething it cannot do » Checks and reports for you : to develop  about the quality of developments 39
  40. 40. Maven, the corporate’s choice •  Widely adopted and known » Many developers •  Developments are standardized •  Decrease of costs » Reuse of knowledge » Reuse of configuration fragments » Reuse of process and code fragments •  Product quality improvement » Reports and monitoring 40
  41. 41. Competitors •  Ant + Ivy, Easy Ant, Gant, Gradle, Buildr… •  Script oriented »  You can do what you want ! •  Reuse many of Maven conventions (directories layout, …) and services (repositories) but without enforcing them •  The risk for them : Not being able to evolve due to the too high level of customization proposed to the user. »  We tried on Maven 1 and it died because of that. It was impossible to create a set of tests to cover all usages. »  It’s like providing a framework without public API  41
  42. 42. With scripts oriented builds You can have But often you have (if you have good skills) (moreover after years …) 42
  43. 43. With Maven We dream to deliver But today we have too often (Maven 3.x) (Maven 2.x) 43
  44. 44. Apache Maven BACK TO THE FUTURE
  45. 45. Apache Maven PRODUCT 45
  46. 46. Apache Maven 2.0.x •  bugs fix •  Last release : 2.0.11 •  No other release of 2.0.x in the future 46
  47. 47. Apache Maven 2.x •  Evolutions, new features •  Several important new features in 2.1 like » Parallel downloads » Encrypted passwords » Reactor command line options •  Last release : 2.2.1 47
  48. 48. Apache Maven 3.x •  Do not be afraid !!!!! •  Full compatibility with maven 2.x projects » Or at least at 99,99999% •  Availability in 2010 (2nd half) 48
  49. 49. Apache Maven 3.x – Why ? » To build new foundations for the future » The major part of the code was reviewed / rewritten •  How POMs are constructed •  How the lifecycle is executed •  How the plugin manager executes •  How artifacts are resolved •  How it can be embedded •  How dependency injection is done •  … 49
  50. 50. Apache Maven 3.x - robustness •  Error & integrity reporting »  Much improved error reporting where we will provide links to each identifiable problem we know of. There are currently 42 common things that can go wrong. »  Don't allow builds where versions come from non- project sources like local settings and CLI parameters »  Don't allow builds where versions come from profiles that have to be activated manually •  Backward compatibility »  Several thousands of integration tests 50
  51. 51. Apache Maven 3.x - performances •  Many optimizations •  New support of parallel builds of modules •  New incremental (partial) build » To improve IDE integration 51
  52. 52. Apache Maven 3.x – new features •  Any-source POM » If you don’t like XML, choose another DSL •  Versionless parent elements » If you don’t use versions or release plugins to automatically update them •  Mixins » a compositional form of Maven POM configuration •  Global excludes 52
  53. 53. Apache Maven 3.x •  What it will change for maven developers ? » Lifecycle extension points » Plugin extension points » Incremental build support » Queryable lifecycle » Extensible reporting » Bye bye Plexus, welcome JSR 330 & Google Guice » Well defined and documented APIs 53
  54. 54. Apache Maven 3.x – New tools •  mvnsh » A cross-platform shell dedicated to maven •  Tycho » Maven ready for OSGI and Eclipse developments 54
  55. 55. In Apache Maven 3.0 ? •  A backward compatibility near to 100% for projects and plugins •  A totally new implementation » A greater robustness with a better reporting and more readable logs » Performances improvements and new parallel builds » A better integration for others tools like IDE or continuous integration servers •  No change in current POM format 55
  56. 56. Apache Maven COMMUNITY 56
  57. 57. Users Mailing List •  users@maven.apache.org •  Blue : »  Traffic statistics cover a » Number of subscribers total of 1697 days. •  Red : »  Current subscribers: 1861 » Number of messages »  Current digest per day subscribers: 47 »  Total posts (1697 days): 80633 »  Mean posts per day: 47.52 •  http://pulse.apache.org/ 57
  58. 58. Apache Maven Web Site 58
  59. 59. Dowloads Per month downloads http://people.apache.org/~vgritsenko/stats/ projects/maven.html 59
  60. 60. The team •  60committers, •  More than 30 active in 2009, •  Several organizations like Sonatype, deliver resources and professional support, •  A community less isolated : more interactions with Eclipse, Jetty, 60
  61. 61. Commit Statistics 61
  62. 62. Apache Maven ECOSYSTEM
  63. 63. Maven’s ecosystem •  Maven alone is nothing •  You can integrate it with many tools » A large set of plug-ins is already available » You can define your own plug-ins 63
  64. 64. Apache Maven REPOSITORY MANAGERS 64
  65. 65. Repository Managers •  Basic services •  Several products »  Search artifacts »  Browse repositories » Sonatype Nexus »  Proxy external repositories (replaced Proximity) »  Host internal repositories » Jfrog Artifactory »  Security » Apache Archiva 65
  66. 66. Secure your builds •  Deploy a repository manager to proxy externals repositories to : »  Avoid external network outages »  Avoid external repository unavailabilities »  To reduce your company’s external network usage »  To increase the speed of artifact downloads •  Additional services offered by such servers : »  Artifacts procurement to filter what is coming from the outside »  Staging repository to validate your release before deploying it 66
  67. 67. Nexus at eXo for productivity 67
  68. 68. Nexus at eXo for collaboration •  Deploy 3rd Party Artifacts •  Collaborate with Internal Repositories •  Distribute to the community with Public Repositories •  Distribute to customers with Private Repositories 68
  69. 69. Nexus at eXo for quality •  Ease the Burden on Central and others remote repositories •  Gain Predictability and Scalability •  Control and Audit Dependencies and Releases •  Stage releases 69
  70. 70. Apache Maven QUALITY MANAGEMENT 70
  71. 71. Tests Automation •  Use automated tests as often as you can •  Many tools are available through Maven » JUnit, TestNG – unit tests, » Selenium, Canoo – web GUI test, » Fitnesse, Greenpepper – functional tests, » SoapUI – web services tests » JMeter – performances tests » And many more frameworks are available to reply your needs 71
  72. 72. Quality Metrics •  Extract quality metrics from your project and monitor them : »  Code style (CheckStyle) »  Bad practices or potential bugs (PMD, FindBugs, Clirr) »  Tests coverage (Cobertura, Emma, Clover) »  … •  You can use blocking rules »  For example, I break the build if the upward compatibility of public APIs is broken •  You can use reports »  Reports are available in a web site generated by Maven »  Or in a quality dashboard like Sonar 72
  73. 73. Dependency Report 73
  74. 74. Sonar, a quality dashboard 74
  75. 75. Sonar, analyze your project 75
  76. 76. Sonar, Continuous Improvement ? 76
  77. 77. Apache Maven CONTINUOUS INTEGRATION 77
  78. 78. Continuous Integration •  Setup a continuous integration server to : »  Have a neutral and unmodified environment to run your tests »  Quickly react when •  The build fails (compilation failure for example) •  A test fails •  A quality metric is bad »  Continuously improve the quality of your project and your productivity •  Many products »  Hudson, Bamboo, TeamCity, Continuum, Cruisecontrol, … 78
  79. 79. Hudson, how the weather is ? 79
  80. 80. Hudson : build, test, check 80
  81. 81. Apache Maven IDE 81
  82. 82. Eclipse •  Integration from maven (eclipse:eclipse) » Allow many customizations » Support many versions/variants of eclipse » Support many usages (ear …) » Doesn’t support projects with “pom” packaging » Few support from dev team » Many bugs in classpath management » Asynchronous •  You have to regenerate and reload project each time you change a POM) 82
  83. 83. Eclipse •  Integration from eclipse (m2eclipse) » Synchronous » Nice UI and services to edit POMs » Support projects with “pom” packaging » Doesn’t support all usages like EAR with WTP » Doesn’t support very well a large number of modules » Slow down eclipse on large projects because of a lack of support of incremental build in Maven 2.x and its plugins 83
  84. 84. Eclipse (m2eclipse) 84
  85. 85. Eclipse (m2eclipse) 85
  86. 86. Eclipse (m2eclipse) 86
  87. 87. Idea IntelliJ 87
  88. 88. Netbeans 88
  89. 89. Apache Maven GOOD & BAD PRACTICES
  90. 90. Apache Maven KISS 90
  91. 91. K.I.S.S. •  Keep It Simple, Stupid •  Start from scratch »  Do not copy/paste what you find without understanding •  Use only what you need »  It’s not because maven offers many features that you need to use them •  Filtering •  Modules •  Profiles •  … 91
  92. 92. Apache Maven PROJECT ORGANIZATION GOOD & BAD PRACTICES 92
  93. 93. Project bad practices 93
  94. 94. Project bad practices •  Have too many modules » Is there a good reason ? •  Technical constraint ? •  Team organization ? » It increases the build time •  Many more artifacts to generate •  Dependencies resolution more complex » It involves more complex developments •  More modules to import in your IDE •  More modules to update … 94
  95. 95. Project good practices •  Use the default inheritance : » The reactor project is also the parent of its modules. » Configuration is easier : •  No need to redefine SCM settings, site distribution settings … 95
  96. 96. Apache Maven POM GOOD & BAD PRACTICES 96
  97. 97. POM bad practices •  Dependencies : » DON’T confuse dependencies and dependencyManagement •  Plugins : » DON’T confuse plugins and pluginManagement » DON’T use AntRun plugin everywhere » DON’T let Maven choose plugins versions for you 97
  98. 98. POM bad practices •  Profiles : » DON’T create environment dependant builds » DON’T rely on dependencies coming from profiles (there is no transitive activation of profiles) •  Reporting and quality » DON’T activate on an existing project all reports with default configuration » DON’T control formatting rules without giving settings for IDEs. •  DON’T put everything you find in your POM. 98
  99. 99. POM good practices •  Set versions of dependencies in project parent’s dependencyManagement •  Set dependencies (groupId, artifactId, scope) in each module they are used •  Use the dependency plugin (from apache) and versions plugin (from mojo) to analyze, cleanup and update your dependencies. 99
  100. 100. Apache Maven DEVELOPMENT GOOD & BAD PRACTICES 100
  101. 101. Development bad practices •  DON’T spend your time in the terminal, •  DON’T exchange libraries through emails, •  DON’T always use "-Dmaven.test.skip=true” •  DON’T manually do releases 101
  102. 102. Development good practices •  Keep up-to-date your version of Maven »  For example in 2.1 the time of dependencies/modules resolution decreased a lot (Initialization of a project of 150 modules passed from 8 minutes to less than 1) •  Use the reactor plugin (Maven < 2.1) or native reactor command line options (Maven >= 2.1) to rebuild only a subpart of your project : »  All modules depending on module XXX »  All modules used to build XXX •  Try to not use Maven features not supported by your IDE (resources filtering with the plugin eclipse:eclipse) 102
  103. 103. Apache Maven USECASES
  104. 104. Apache Maven SECURE YOUR CREDENTIALS 104
  105. 105. Secure your credentials   Generate a private key -  
 arnaud@leopard:~$ mvn --encrypt-master-password toto
 {dZPuZ74YTJ0HnWHGm4zgfDlruYQNda1xib9vAVf2vvY=}
 ●  We save the private key in ~/.m2/settings-security.xml <settingssecurity>! <master>{dZPuZ74YTJ0HnWHGm4zgfDlruYQNda1xib9vAVf2vvY=}</master>! </settingssecurity>! 105
  106. 106. Secure your credentials ●  You can move this key to another drive ~/.m2/settings.xml -  <settingsSecurity>
 <relocation>/Volumes/ArnaudUsbKey/secure/settings-security.xml</relocation>
 </settingsSecurity>! ●  You create an encrypted version of your server password -  arnaud@mbp-arnaud:~$ mvn --encrypt-password titi {SbC9Fl2jA4oHZtz5Fcefp2q1tMXEtBkz9QiKljPiHss=}! ●  You register it in your settings -  <settings>
 ...
 <servers>
 ...
 <server>
 <id>mon.server</id>
 <username>arnaud</username>
 <password>{SbC9Fl2jA4oHZtz5Fcefp2q1tMXEtBkz9QiKljPiHss=}</password>
 </server>
 ...
 </servers>
 ...
 </settings>! 106
  107. 107. Apache Maven BUILD A PART OF YOUR PROJECT 107
  108. 108. Using Reactor Options •  Options added in maven 2.1 •  Available in 2.0.x with the maven-reactor-plugin » But syntax is longer •  Allow to control what you want to build in your project 108
  109. 109. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install
 [INFO] ------------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] Project ....................... SUCCESS [2.132s]
 [INFO] ModuleA ....................... SUCCESS [5.574s]
 [INFO] ModuleB ....................... SUCCESS [0.455s]
 [INFO] ModuleC ....................... SUCCESS [0.396s]
 [INFO] ModuleD ....................... SUCCESS [0.462s]
 [INFO] ModuleE ....................... SUCCESS [0.723s]
 [INFO] ModuleF ....................... SUCCESS [0.404s]!   Builds everything from A to F 109
  110. 110. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install –pl moduleE,moduleB
 [INFO] -------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] ModuleB .................. SUCCESS [2.774s]
 [INFO] ModuleE .................. SUCCESS [1.008s]
   Builds only modules B and E   Following dependencies order   -pl --project-list: Build the specified reactor projects instead of all projects 110
  111. 111. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install –pl moduleD -am
 [INFO] ------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] ModuleA ................. SUCCESS [4.075s]
 [INFO] ModuleB ................. SUCCESS [0.468s]
 [INFO] ModuleC ................. SUCCESS [0.354s]
 [INFO] ModuleD ................. SUCCESS [0.384s]
   Builds module D (-pl) and all modules it uses as dependencies   -am --also-make: If a project list is specified, also make projects that the list depends on   Usecase : Build all modules required for a war, ear, … 111
  112. 112. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install –pl moduleD -amd
 [INFO] ------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] ModuleD ................. SUCCESS [4.881s]
 [INFO] ModuleE ................. SUCCESS [0.478s]
 [INFO] ModuleF ................. SUCCESS [0.427s]
   Builds module D (-pl) and all modules which depend on it   -amd --also-make-dependents: If a project list is specified, also make projects that depend on projects on the list   Usecase : Check that a change in a module didn’t break others which are using it 112
  113. 113. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install –rf moduleD
 [INFO] ------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] ModuleD ................. SUCCESS [9.707s]
 [INFO] ModuleE ................. SUCCESS [0.625s]
 [INFO] ModuleF ................. SUCCESS [0.679s] [INFO] Project ................. SUCCESS [2.467s]
   Restarts all the build from module D (-rf)   -rf,--resume-from <arg> : Resume reactor from specified project   Usecase : The build failed a 1st time in module D, you fixed it, and restart the build were it was to end it. 113
  114. 114. Apache Maven RELEASE YOUR PROJECT 114
  115. 115. Release of a webapp in 2002 •  Limited usage of eclipse » No WTP (Only some features in WSAD), » No ability to produce WARs 115
  116. 116. Release of a webapp in 2002 •  Many manual tasks » Modify settings files » Package JARs » Copy libraries (external and internal) in a « lib » directory » Package WAR (often with a zip command) » Tag the code (CVS) » Send the package on the integration server using FTP » Deploy the package with AS console 116
  117. 117. Release of a webapp in 2002 •  Oneproblem : The are •  How long did it take ? always problems » When everything is ok : » Error in config files 15 minutes »  Missing dependencies » When there’s a »  Missing file problem : ½ day or »  Last minute fix which created a bug more »  And many other possibilies .. 117
  118. 118. Maven Release Plugin •  Automates the release process from tagging sources to binaries delivery •  Release plugin main goals: » Prepare : To update maven versions and information in POMs and tag the code » Perform : To deploy binaries in a maven repository •  After that you can just automate the deployment on the AS using cargo for example. 118
  119. 119. Maven Release Plugin 119
  120. 120. Configuration and Prerequisites •  Project version (must be a SNAPSHOT version) •  Dependencies and plugins versions mustn’t be SNAPSHOTs 120
  121. 121. Troubleshooting Releases •  Common errors during release: » Build with release profile was tested before and fails » Local modifications » Current version is not a SNAPSHOT » SNAPSHOTs in dependencies and/or plugins » Missing some configuration (scm, distribMgt, …) » Tag already exists » Unable to deploy project to the Repository » Connection problems 121
  122. 122. SCM configuration SCM binaries have to be in the PATH SCM credentials have to already be stored or you have to pass them in command line with : –Dusername=XXX –Dpassword=XXX <scm>! <connection>scm:svn:http://svn.acme.com/myproject/trunk</connection>! <developerConnection>scm:svn:https://svn.acme.com/myproject/trunk</developerConnection>! <url>http://fisheye.acme.com/browse/myproject/trunk</url>! </scm>! 122
  123. 123. Distribution Management •  Where you want to upload released binaries »  The url of a repository dedicated for your project/ corporate maven deliveries in your repository manager <project>! <distributionManagement>! <repository>! <id>repository.acme.com</id>! <url>${acme.releases.repo.url}</url>! This id will be used in user’s </repository>! maven settings . . .! (~/.m2/settings.xml) </distributionManagement>! . . . ! <properties>! <acme.releases.repo.url>http://repo.acme.com/acme-releases</acme.releases.repo.url>! . . .! </properties>! </project>! Often useful to have a property to test the release process on a fake repository, to validate a repo manager ... 123
  124. 124. Repository credentials •  One server entry is required per different repository id in distribution management of projects •  In a corporate environment, use a unique id for all repositories hosted on repository managers using same credentials (corporate LDAP …) <settings>! ...! <servers>! <server>! <id>repository.acme.com</id>! <username>aheritier</username>! This id is the one defined in <password>{ABCDEFGHIJKLMNOPQRSTUVWYZ}</password>! distributionManagement entry of </server>! the project to release ...! </servers>! ...! </settings>! 124
  125. 125. Default Release Profile in Super POM •  This profile is used when you generate binaries of the release with “mvn release:perform” •  By default, generates sources and javadocs jars for each module. <profile>! <id>release-profile</id>! <activation>! <property>! <name>performRelease</name>! <value>true</value>! This activation could be used in </property>! profiles you want to activate in </activation>! the release process <build>! <plugins>! ...! </plugins>! Configuration to generate </build>! sources and javadoc jars with </profile>! basic setting 125
  126. 126. Custom release profile <project>! ...! <build>! <pluginManagement>! <plugins>! <plugin>! <groupId>org.apache.maven.plugins</groupId>! <artifactId>maven-release-plugin</artifactId>! <version>2.0</version>! <configuration>! <useReleaseProfile>false</useReleaseProfile>! <releaseProfiles>myreleaseprofile</releaseProfiles>! Don’t use the default profile </configuration>! </plugin>! Use our customized profile </plugins>! </pluginManagement>! </build>! ...! <profiles>! <profile>! <id>myreleaseprofile</id>! <build>! Our customized profile ...! </build>! Customize the behavior of </profile>! </profiles>! the build for a release ...! Take care to test is before </project>! the release !! 126
  127. 127. Apache Maven SETUP A GLOBAL MIRROR 127
  128. 128. Why should we setup a global mirror ? •  To simplify users and projects settings •  To control where binaries are coming from » To not rely on project’s repositories » To use only the corporate repository manager •  To improve build performances » By reducing the number of requests to find a missing artefact 128
  129. 129. How should we setup a global mirror ? <setting>
 <mirrors>
 <mirror>
 <id>global-mirror</id>
 <mirrorOf>external:*</mirrorOf>
 <url>http://repo.acme.com/public</url>
 </mirror>
 Send all requests to this url </mirrors>
 <profiles>
 <profile>
 <id>mirror</id>
 <repositories>
 <repository>
 <id>central</id>
 <url>http://central</url>
 <releases><enabled>true</enabled></releases>
 Use « central » id to override <snapshots><enabled>true</enabled></snapshots>
 default maven configuration </repository>
 </repositories>
 Enable snapshots <pluginRepositories>
 <pluginRepository>
 <id>central</id>
 <url>http://central</url>
 <releases><enabled>true</enabled></releases>
 <snapshots><enabled>true</enabled></snapshots>
 </pluginRepository>
 </pluginRepositories>
 </profile>
 </profiles>
 <activeProfiles>
 <activeProfile>mirror</activeProfile>
 </activeProfiles>
 </settings> ! make the profile active all the time 129
  130. 130. Apache Maven CONCLUSION 130
  131. 131. Conclusion •  Today, Maven is widely adopted in corporate environments, •  It provides many services, •  It has an important and really active community of users and developers •  Many resources to learn to use it and a professional support are available •  A product probably far from being perfect but on rails for the future. Maven 3.0 is a new start. •  Many things to do »  We need you ! 131
  132. 132. Apache Maven QUESTIONS ? 132
  133. 133. Licence et copyrights •  Photos and logos belong to their respective authors/owners •  Content under Creative Commons 3.0 » Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). » Noncommercial — You may not use this work for commercial purposes. » Share Alike — If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one. •  http://creativecommons.org/licenses/by-nc-sa/3.0/us/ 133
  134. 134. Apache Maven TO GO FURTHER …
  135. 135. Apache Maven DOCUMENTATIONS 135
  136. 136. Some links •  The main web site : » http://maven.apache.org •  Project’s team wiki : » http://docs.codehaus.org/display/MAVEN •  Project’s users wiki : » http://docs.codehaus.org/display/MAVENUSER 136
  137. 137. Books •  NicolasDe loof Arnaud Héritier » Published by Pearson » Collection Référence » Based on our own experiences with Maven. » From beginners to experts. » In French only 137
  138. 138. Books •  Sonatype / O’Reilly : » The Definitive Guide » http:// www.sonatype.com/ books » Free download » Available in several languages 138
  139. 139. Books •  Exist Global » Better builds with Maven » http:// www.maestrodev.com/ better-build-maven » Free download 139
  140. 140. Apache Maven SUPPORT 140
  141. 141. Support •  Mailing lists » http://maven.apache.org/mail-lists.html •  IRC » irc.codehaus.org - #maven •  Forums » http://www.developpez.net/ forum maven » In French •  Dedicated support » Sonatype and many others companies 141
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×