1. Maven
Tips & Tricks
Brown Bag Lunch - January 2013
1 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
2. Lifecycle
1. process-resources
2. compile
3. process-test-resources
4. test-compile
5. test
6. package
7. install
8. deploy
2 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
3. Search engines
• http://search.maven.org/
• search through Maven Central
• http://mvnrepository.com/
• http://nexus.srm
• in house repository
3 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
4. Artifacts naming
• groupId:artifactId:[classifier:]type:version
4 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
6. Artifacts naming
• groupId:artifactId:[classifier:]type:version
• short explicit names are the best
6 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
7. Artifacts naming
• groupId:artifactId:[classifier:]type:version
• optional
• allows to specify special versions
7 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
8. Artifacts naming
• groupId:artifactId:[classifier:]type:version
• one of jar,pom,war,ear...
• determines the nature of the dependency
8 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
9. Artifacts naming
• groupId:artifactId:[classifier:]type:version
• version number (dot formatted)
• -SNAPSHOT are in development dep.
9 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
10. Project inheritance
• Allows to group common configuration
• repositories
• codestyle...
• Ease project understanding
10 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
11. Dependencies
• Scopes
• compile (default) : required for the app
• runtime : only necessary at runtime
• provided : available by the container
• test : required for testing phase
• system : absolute path (avoid this)
11 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
12. Dependencies
• Don’t Repeat Yourself
• Make your dependencies consistent
12 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
13. Dependencies
• Super POM does the
dependenciesManagement
• <groupId>, <artifactId>, <version>,
<scope>, <exclusions>
13 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
14. 14 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
15. Dependencies
• POMs inherit the Super POM
• only use <dependencies>
• <groupId>, <artifactId>
• specific <scope>
15 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
16. 16 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
17. Dependencies
• Plugins follow the same rule
• <pluginManagement> in Super POM
• common <configuration>
Always fix plugins’ versions
17 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
18. Dependencies
• Plugins follow the same rule
• <plugin> in children
• specific <configuration>
18 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
19. Properties
• Ease dependency upgrade
• only one value to update
• See all dependencies versions at once
19 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
20. Troubleshoot
• Debug
• mvn -X
• Work offline
• mvn -o | --offline
20 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
21. Troubleshoot
• Get the computed POM
• mvn help:effective-pom
• Get the dependency tree
• mvn dependency:tree
21 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13
22. Clean local repository
• wget https://raw.github.com/CedricGatay/small-
scripts/master/groovy/CleanDir.groovy
• groovy CleanDir.groovy
• groovy -DdryRun=false CleanDir.groovy
22 Cedric Gatay - c.gatay@srmvision.com Pulling ITSM together
jeudi 17 janvier 13