Title: Maven 1.0
1Maven 1.0
2Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Writing a plugin
- Mavens future
3Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Writing a plugin
- Mavens future
4Analogy How to develop an application?
Solution 1
Solution 2
My Application
My Application
Services
Container
API
E.g. Application Server, Eclipse RCP, Netbeans,
etc
Frameworks
5How to develop a build?
Solution 1 Ant
Solution 2 Maven
My Build
My Build
Goals/Plugins
Maven (Container)
Task calls
Ant tasks
Maven is a build container
6Advantages of a Container approach
- Ability to reuse existing services
- More than 100 existing Maven plugins (jar,
cactus, clover, jira, site, dashboard, etc)
- Easy to start with
- All working, just need to configure and extend
- Ability to benefit from new services simply by
upgrading
- Well-defined and shared structure/architecture
- Easier to maintain
- Knowledgable resources on the market
- Well-defined structure
- It makes sense to use a custom approach when
flexibility is a must
- This is not usually the case for builds
7Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Writing a plugin
- Mavens future
8Maven 101
- Maven in 3 concepts
- POM (Project Object Model)
- Plugins
- Made of Goals Actions
- Repositories
- Maven files
- project.xml
- POM
- maven.xml
- Custom goals in Jelly
- Goal, preGoal, postGoal
- project.properties
- Configuration
- build.properties
- Configuration
9POM example (1/2)
10POM example (2/2)
11Project lifecycle with Maven plugins (1/2)
1
2
3
Prepare Project
Compile/ArchiveUnit tests
Quality checks
- Genapp - JBuilder- Idea- JDeveloper- Eclipse
- Scm
- Java- Jar- War- Ejb- Ear- Rar- Uberjar-
XDoclet- Test- AspectJ
- Checkstyle- PMD- Findbugs - Clover- Emma- J
Coverage - JDepend - Ncss - Patterntesting -
Clirr
12Project lifecycle with Maven plugins (2/2)
4
5
6
EnvironmentDeployment Functional tests
Site/Report Generation
Deployment
- JBoss- WebSphere- WebLogic- Jetty
- Cactus
- Latka - HttpUnit - Abbot - (Cargo)
- Site Changes Jira Dashboard Changelog
File activity- Developer activity
StatCvs
Announcement
- Site - Dist - Artifact- War/Ejb/Ear/Jar... -
Scm
- Nsis - (Cargo)
13Demo time
- Create a new project using the genapp plugin
- 10 seconds
- Create a matching Eclipse project using the
eclipse plugin
- 5 seconds
- Create a jar and run the unit tests (jar/test
plugins)
- 5 seconds
- Create the developers website including reports
- 15 seconds
14Maven Repositories
Web Server
project.xml (POM)
Download artifact
Get dependencies
1
Remote Repository
3
Maven core
HTTP
Local Repository
2
4
Save artifact in local repository
Checks if artifact exists in local repo.
JVM 1
JVM 2
15Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Writing a plugin
- Mavens future
16Multiproject example Cargo
- cargocommoncoreantdistributionsamples
java ant testdata simple-ear
core
ant
distribution
samples/java
testdata/
samples/ant
17Multiproject best practices (1/3)
- Use a common directory to share build-related
resources
- Shared Maven POM
- project.xml
- Shared custom Maven goals
- maven.xml
- Shared Maven properties
- project.properties
- Checkstyle files
- Licenses
- etc
18Multiproject best practices (2/3)
- Create custom project-wide goals
- cargodist
- cargoclean
cargosite cargodeploy
cargoclover cargosite-deploy
etc
19Multiproject best practices (3/3)
- Create lots of Maven projects
- Same as with OOP, separation of concerns is good
- With Maven it is separation of builds
- One main artifact per build
- Whenever theres a need to share artifacts
between projects
- Ex testdata/ for Cargo
- Maven needs to improve handling of in-situ
artifacts (m2)
- Currently needs to go through local Maven
repository
20Typical J2EE multiproject organisation
applications a set of modules packaged together
to make an application. It contains configuration
files
output EAR, JNLP WAR, etc
containers a set of applications that execute
inside a container (ex JBoss, Web server, Tibco,
Database, etc). It contains container
configuration files and container directory
structure. output configured container as a
zip.
modules set of libraries containing business
logic. They can depend on each other.
output jars, ejb-jars, wars, rars, etc
nodes a set of containers that will be deployed
on a specific type of machine.
output configured node as a zip.
system represents the full system, i.e. a set of
nodes. output set of nodes packaged in a zip
for example.
21Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Writing a plugin
- Mavens future
22Deployments with Maven
- Its still an unconsolidated area
- Several plugins can be used
- Artifact
- SCM
- Release
- Dist
- Site
- Artifact generation plugins
- In the future, to be replaced by Maven-Wagon and
Maven-SCM
23Deploying an artifact
- Several plugins have install and deploy
goals
- install installs the artifact in the local
repository
- deploy deploys the artifact to a remote
Repository
- Ex jardeploy, wardeploy, ejbdeploy,
eardeploy, rardeploy
- Use directly artifact plugin
- "ejbjarwar"project"pom"/
- Optionally use a typeHandler attribute to provide
your own deployment (you must extend
ArtifactTypeHandlerQQQ
- Several methods supported
- HTTP, File, FTP, SFTP, SCP (JSch), External
(batch, shell), SCP (External scp command)
- Defined by the URL provided in the
maven.repo.reponame property
- Configured using properties
- maven.repo.listapache
- maven.repo.apachescp//pom.distributionSite
- maven.repo.apache.directorypom.distributionDire
ctory
- maven.repo.apache.groupmaven
- maven.repo.apache.username
- maven.repo.apache.privatekey
- maven.repo.apache.passphrase
24Deploying a site
- The Maven site is deployed using the sitedeploy
goal
- It is still using the old way of deploying
- Needs to be moved to the new Deployer
- Configured using the maven.site.deploy.method
property
- Supports the following protocols
- Fs, FTP, SCP/SSH (command line)
- Example of configuration properties
- maven.username
- maven.password (FTP)
- maven.ssh.executable (SCP/SSH)
- maven.scp.executable (SCP/SSH)
- POM siteDirectory
- POM siteAddress
25Other plugins used for deployment
- Dist plugin binary an src distributions (tar.gz
and zip)
- Uses Artifact plugin under the hood for deploying
the distribution
- Scm plugin
- Currently only supports CVS
- Assume usage of tags in project.xml
- Assume usage of changes.xml file
- Does not work if youre using the JIRA strategy
for example
- Future use Maven-SCM
- Release plugin deprecated, do not use.
- The idea was to perform additional task on
release notify blogs, lists, increase version,
etc what scm plugin is currently doing
- Nsis plugin Used to generate Win32 installers
26Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Writing a plugin
- Mavens future
27Maven integrations
- IDE
- Mevenide (Eclipse Netbeans JBuilder)
- Goal launcher
- Search in well known Maven remote repos
- POM editor
- POM validation
- POM/IDE synchronizer
- Jelly editor
- Maven builder nature (know which goals should be
run when resources change)
- Continuous builds
- CruiseControl, DamageControl, Gump, Continuum
- Future (m2) all Java
- Easier integration
- Talks about a Maven IDE
28Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Maven and continuous builds
- Writing a plugin
- Mavens future
29Continuous build using SNAPSHOTs
Remote Repository
Local Repository
A
B
Synchronization
C
Deploy SNAPSHOTs
get dependent artifacts from A and B
Maven Continuous Build
Project C Build
30Multi-location setup
Src Repository (CVS)
Internet connection / leased line
commits
commits
Continuous Build
Maven Remote Repository
Maven Remote Repository
Synchronization (rsync)
Country 1
Country 2
31Maven repositories
Enterprise Remote Repository
Stable versions
Project A Remote Repository
Project B Remote Repository
SNAPSHOTs
SNAPSHOTs
32Team organization
Project Manager
Build Coach
Team N
- Build Coach
- The new type of Quality Manager?
- Overall build responsibility
- Schedule build improvements in project
iterations
- Defines quality strategies
- E.g. Clover start at 0 and at each iteration
increase to level attained. Fail build if below.
- Manages build improvements
- Improve build-awareness
- Every day commit by team
- Run local build before commits
- Gather build requirements from teams
- What checkstyle rules do we want to apply?
- Is the build running fast enough?
- Analyze reasons for build failures
- Build leaders in each team
- Analyze build failures
- Ensure build failure are given top priority and
get fixed ASAP
- Coaches team to be build-aware and listen to
team
Build Leader
33Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Writing a plugin
- Mavens future
34Writing a Maven plugin
plugin.jelly
lycore" xmlnsant"jellyant" e"hello" description"Send nice message"
Hello world!
To build and deploy maven plugininstall
35Writing tests for a Maven plugin
maven.xml
util" xmlnsj"jellycore" xmlnsant"jelly
ant" xmlnsx"jellyxml" xmlnsassert"asse
rt" ...
To start the tests maven plugintest
36Tips and tricks to write a Maven plugin
- Check out the maven-plugins CVS module. There
are over 80 plugins implemented there
- Refer to the Jelly Tag documentation
- http//jakarta.apache.org/commons/jelly
- Watch out for dots (.) in Jelly variable names
- Because a dot indicates a method call. Jelly uses
JEXL which calls Java expression
- Incorrect
- Correct
- riable)
- Really, learn to read Jelly from other plugin
code!
37Agenda
- Why Maven?
- Maven 101
- Setting up a multiproject
- Deployments with Maven
- Maven integrations
- Maven in the enterprise
- Writing a plugin
- Mavens future
38Maven 2
- Better architecture based on Plexus (lightweight
container)
- Remove dependency on Jelly. Primary language for
plugin development is Java but other languages
can be plugged in (Jelly, Marmalade, BeanShell,
etc) - Faster!
- Embeddable, IDE-friendly
- Fix most limitations of Maven 1
- Rewrite from scratch
- But reuse Maven 1 use cases
- Hopefully ability to reuse Maven 1 plugins
- Not ready yet! First version probably not
available before mid-2005.
- Before that Maven 1.1, possibly with some m2
components
- Use Maven Model tighten POM definition, upgrade
- Use Maven Wagon artifact handler
- Use Maven SCM unified Java API for SCMs
39Some limitations of Maven 1.x
- Handling of local artifacts (aka in-situ
artifacts)
- Better versioning requirements for dependencies
(e.g. 1.3)
- Share common dependencies in POM between
projects
- No dependency types (runtime, test, etc)
- Transitive dependencies support
- Transparent plugin download
- Unified configuration (project.xml vs properties
file)
- Plugin configuration in XML (Plugin descriptor)
40Resources
- Web sites
- Maven
- http//maven.apache.org/
- Maven Wiki
- http//wiki.codehaus.org/maven/
- Jelly
- http//jakarta.apache.org/commons/jelly
- Maven blogs
- http//www.mavenblogs.com/
- Presentations
- J2EE with Maven
- http//www.pivolis.com/pdf/J2EE_projects_Maven_V1.
1.pdf
- Enterprise builds
- http//www.pivolis.com/pdf/Enterprise_Builds_V1.0.
pdf
41QA
?
42Tips and tricks
- Do not try to migrate complex builds to Maven
- Its frustrating
- Its difficult to adapt from a custom structure
to the structure recommended by Maven
- Trust Maven!
- Let it guide your build structure
- Itll make your life easier and youll be able to
use all existing plugins all the more easily