mastering maven 2.0 in 1 hour v1.3

165
by Matthew McCullough of Ambient Ideas, LLC Maven Mastering Increase your MoJo-tivity

Upload: matthew-mccullough

Post on 30-Aug-2014

26.279 views

Category:

Technology


0 download

DESCRIPTION

Presentation of Mastering Maven to the SDJUG team in San Diego, CA.

TRANSCRIPT

Page 1: Mastering Maven 2.0 In 1 Hour V1.3

by Matthew McCullough of Ambient Ideas, LLC

MavenMastering

Increase your MoJo-tivity

Page 2: Mastering Maven 2.0 In 1 Hour V1.3

Matthew

Page 3: Mastering Maven 2.0 In 1 Hour V1.3
Page 4: Mastering Maven 2.0 In 1 Hour V1.3
Page 5: Mastering Maven 2.0 In 1 Hour V1.3
Page 6: Mastering Maven 2.0 In 1 Hour V1.3
Page 7: Mastering Maven 2.0 In 1 Hour V1.3

http://refcardz.dzone.com/refcardz/apache-maven-2

Page 8: Mastering Maven 2.0 In 1 Hour V1.3

Maven useon the upswing

Page 9: Mastering Maven 2.0 In 1 Hour V1.3
Page 10: Mastering Maven 2.0 In 1 Hour V1.3
Page 11: Mastering Maven 2.0 In 1 Hour V1.3
Page 12: Mastering Maven 2.0 In 1 Hour V1.3

Convention

Configurationover

Page 13: Mastering Maven 2.0 In 1 Hour V1.3
Page 14: Mastering Maven 2.0 In 1 Hour V1.3
Page 15: Mastering Maven 2.0 In 1 Hour V1.3

DefaultGoal

Page 16: Mastering Maven 2.0 In 1 Hour V1.3

Default Goal

‣ Often not set.‣ Saves typing.‣ Communicates author’s intended goal.‣ Only one goal or phase allowed.

Page 17: Mastering Maven 2.0 In 1 Hour V1.3

mvn install

Page 18: Mastering Maven 2.0 In 1 Hour V1.3

<project> <groupId>com.ambientideas</groupId> <artifactId>sample-defaultgoal</artifactId> [...] <build> <defaultGoal>install</defaultGoal> </build>

[...]</project>

Page 19: Mastering Maven 2.0 In 1 Hour V1.3

mvn install

Page 20: Mastering Maven 2.0 In 1 Hour V1.3

mvn install

Page 21: Mastering Maven 2.0 In 1 Hour V1.3

mvn

Page 22: Mastering Maven 2.0 In 1 Hour V1.3

SuperPom

Page 23: Mastering Maven 2.0 In 1 Hour V1.3

Super Pom

‣ Pseudo-invisible.

Page 24: Mastering Maven 2.0 In 1 Hour V1.3

Super Pom

‣ Pseudo-invisible.

‣ All projects inherit it.

Page 25: Mastering Maven 2.0 In 1 Hour V1.3

Super Pom

‣ Pseudo-invisible.

‣ All projects inherit it.

‣ Specifies file location defaults.

Page 26: Mastering Maven 2.0 In 1 Hour V1.3

Super Pom

‣ Pseudo-invisible.

‣ All projects inherit it.

‣ Specifies file location defaults.

‣ Locks version of common plugins.‣ post mvn 2.0.8.‣ Increases build stability.

Page 27: Mastering Maven 2.0 In 1 Hour V1.3

<!-- START SNIPPET: superpom --><project> <modelVersion>4.0.0</modelVersion> <name>Maven Default Project</name>

<build> <directory>target</directory> <outputDirectory>target/classes</outputDirectory> <finalName>${project.artifactId}-${project.version}</finalName> [...] <pluginManagement> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> </plugin> </plugins> </pluginManagement> </build></project>

Page 28: Mastering Maven 2.0 In 1 Hour V1.3

Super Pom

‣ Familiarize yourself with it.‣ View it in SVN.

Page 29: Mastering Maven 2.0 In 1 Hour V1.3
Page 30: Mastering Maven 2.0 In 1 Hour V1.3
Page 31: Mastering Maven 2.0 In 1 Hour V1.3
Page 32: Mastering Maven 2.0 In 1 Hour V1.3

ArchetypesSaving time with

Page 33: Mastering Maven 2.0 In 1 Hour V1.3

Project via Archetype

‣ Project templates on steroids.‣ Seed unit tests.‣ Standardize directory structure.‣ Corporate licenses, OSS licenses.‣ Bundle corporate READMEs.

‣ Doesn’t mutate like a copy-n-paste template.‣ Replaceables for classnames, company info.

Page 34: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn archetype:generate

Page 35: Mastering Maven 2.0 In 1 Hour V1.3

Archetype via Project

‣ Uses existing project as seed.‣ Turns it into a maven archetype.‣ Can publish to a repo for others to use.

Page 36: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn archetype:create-from-project

Page 37: Mastering Maven 2.0 In 1 Hour V1.3
Page 38: Mastering Maven 2.0 In 1 Hour V1.3

Archetype via Archetype

‣ “Template for templates”

Page 39: Mastering Maven 2.0 In 1 Hour V1.3

Archetype via Archetype

‣ “Template for templates”‣ Can be selected from the archetype list.

Page 40: Mastering Maven 2.0 In 1 Hour V1.3

Archetype via Archetype

‣ “Template for templates”‣ Can be selected from the archetype list.

mvn archetype:generate

Page 41: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn archetype:generate -DarchetypeGroupId="org.apache.maven.archetypes" -DarchetypeArtifactId=maven-archetype-archetype -DarchetypeVersion=1.0 -DgroupId=com.ambientideas -DartifactId=mysamplearchetype

Page 42: Mastering Maven 2.0 In 1 Hour V1.3

DependencyManagement

Page 43: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.2

JU:JU:3.8.2

JU:JU:3.8.1 B:B:2.0

Dir

ty T

ree

Page 44: Mastering Maven 2.0 In 1 Hour V1.3

How does Maven resolve versions?

Page 45: Mastering Maven 2.0 In 1 Hour V1.3

Nearest

Page 46: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.2

JU:JU:3.8.2

JU:JU:3.8.1 B:B:2.0

Dir

ty T

ree

Page 47: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.2

JU:JU:3.8.2

JU:JU:3.8.1 B:B:2.0

Dir

ty T

ree

Page 48: Mastering Maven 2.0 In 1 Hour V1.3

Then highest version?

Page 49: Mastering Maven 2.0 In 1 Hour V1.3

Then highest version?

Page 50: Mastering Maven 2.0 In 1 Hour V1.3

Then sequential first at same distance

Page 51: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.2

JU:JU:3.8.2

JU:JU:3.8.1 B:B:2.0

Dir

ty T

ree

Page 52: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.2

JU:JU:3.8.2

JU:JU:3.8.1 B:B:2.0

Dir

ty T

ree

Page 53: Mastering Maven 2.0 In 1 Hour V1.3

[INFO] [dependency:tree][INFO] root.project:ear:ear:1.0[INFO] +- root.project:ejbs:ejb:1.0:compile[INFO] | \- junit:junit:jar:4.0:compile[INFO] +- root.project.servlets:servlet:war:1.0:compile[INFO] +- root.project:primary-source:jar:1.0:compile[INFO] \- root.project.projects:logging:jar:1.0:compile

Firs

t se

quen

tial a

t sa

me

leve

l ➲

Page 54: Mastering Maven 2.0 In 1 Hour V1.3

[INFO] [dependency:tree][INFO] root.project:ear:ear:1.0[INFO] +- root.project:ejbs:ejb:1.0:compile[INFO] | \- junit:junit:jar:4.0:compile[INFO] +- root.project.servlets:servlet:war:1.0:compile[INFO] +- root.project:primary-source:jar:1.0:compile[INFO] \- root.project.projects:logging:jar:1.0:compile

4.0 is resolved

Firs

t se

quen

tial a

t sa

me

leve

l ➲

Page 55: Mastering Maven 2.0 In 1 Hour V1.3

[INFO] [dependency:tree][INFO] root.project:ear:ear:1.0[INFO] +- root.project:ejbs:ejb:1.0:compile[INFO] | \- junit:junit:jar:4.0:compile[INFO] +- root.project.servlets:servlet:war:1.0:compile[INFO] +- root.project:primary-source:jar:1.0:compile[INFO] \- root.project.projects:logging:jar:1.0:compile

Even though I have 4.4 declared as a dependency of primary-source

4.0 is resolved

Firs

t se

quen

tial a

t sa

me

leve

l ➲

Page 56: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.1

JU:JU:3.8.2

JU:JU:3.8.2 B:B:2.0

Res

olvi

ng T

ree

Page 57: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.1JU:JU:3.8.2 B:B:2.0

Res

olvi

ng T

ree

Page 58: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

B:B:2.0

Res

olvi

ng T

ree

JU:JU:3.8.2

Page 59: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

Res

olve

d Tr

ee

JU:JU:3.8.2

Page 60: Mastering Maven 2.0 In 1 Hour V1.3

We’ve resolved the version tree.

Page 61: Mastering Maven 2.0 In 1 Hour V1.3

How about the dependency graph?

Page 62: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.1

JU:JU:3.8.2

JU:JU:3.8.2 B:B:2.0

Dir

ty G

raph

Page 63: Mastering Maven 2.0 In 1 Hour V1.3

A:A:1.0

B:B:1.0 C:C:1.0

JU:JU:3.8.2

Res

olve

d G

raph

Page 64: Mastering Maven 2.0 In 1 Hour V1.3

A dice rollfor complex graphs?

Page 65: Mastering Maven 2.0 In 1 Hour V1.3

Declare desired versions

Page 66: Mastering Maven 2.0 In 1 Hour V1.3

Advertise authorized versions

Page 67: Mastering Maven 2.0 In 1 Hour V1.3

<*Management>

‣ <dependencyManagement>‣ Inheritance for dependency versions.

Page 68: Mastering Maven 2.0 In 1 Hour V1.3

<*Management>

‣ <dependencyManagement>‣ Inheritance for dependency versions.

‣ <pluginManagement>‣ Inheritance for plugin versions and config.

Page 69: Mastering Maven 2.0 In 1 Hour V1.3

<dependencyManagement> and <pluginManagement>

are essentially identical

Page 70: Mastering Maven 2.0 In 1 Hour V1.3

Minimizing declarationswith

<*Management>

Page 71: Mastering Maven 2.0 In 1 Hour V1.3

In the base pom.xml...

Page 72: Mastering Maven 2.0 In 1 Hour V1.3

<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>echodir</id> <goals> <goal>run</goal> </goals> <phase>install</phase> <configuration> <tasks> <echo>Build Dir: ${project.build.directory}</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins></pluginManagement>

Page 73: Mastering Maven 2.0 In 1 Hour V1.3

<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>echodir</id> <goals> <goal>run</goal> </goals> <phase>install</phase> <configuration> <tasks> <echo>Build Dir: ${project.build.directory}</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins></pluginManagement>

Page 74: Mastering Maven 2.0 In 1 Hour V1.3

<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>echodir</id> <goals> <goal>run</goal> </goals> <phase>install</phase> <configuration> <tasks> <echo>Build Dir: ${project.build.directory}</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins></pluginManagement>

Page 75: Mastering Maven 2.0 In 1 Hour V1.3

<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>echodir</id> <goals> <goal>run</goal> </goals> <phase>install</phase> <configuration> <tasks> <echo>Build Dir: ${project.build.directory}</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins></pluginManagement>

Page 76: Mastering Maven 2.0 In 1 Hour V1.3

In the child pom.xml...

Page 77: Mastering Maven 2.0 In 1 Hour V1.3

<plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> </plugin></plugins>

Page 78: Mastering Maven 2.0 In 1 Hour V1.3

Dependency Lists

‣ List view‣ mvn dependency:resolve

‣ Tree view‣ mvn dependency:tree

‣ Plugin list view‣ mvn dependency:resolve-plugins

Page 79: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn dependency:tree[INFO] com.ambientideas:sample13-wicket:war:1.0-SNAPSHOT[INFO] +- org.apache.wicket:wicket:jar:1.3.2:compile[INFO] | \- org.slf4j:slf4j-api:jar:1.4.2:compile[INFO] +- org.apache.wicket:wicket-extensions:jar:1.3.2:compile[INFO] +- commons-collections:commons-collections:jar:3.1:compile[INFO] +- org.slf4j:slf4j-log4j12:jar:1.4.2:compile[INFO] +- log4j:log4j:jar:1.2.14:compile[INFO] +- junit:junit:jar:3.8.2:test[INFO] +- org.mortbay.jetty:jetty:jar:6.1.4:provided[INFO] | \- org.mortbay.jetty:servlet-api-2.5:jar:6.1.4:provided[INFO] +- org.mortbay.jetty:jetty-util:jar:6.1.4:provided[INFO] \- org.mortbay.jetty:jetty-management:jar:6.1.4:provided[INFO] +- mx4j:mx4j:jar:3.0.1:provided[INFO] \- mx4j:mx4j-tools:jar:3.0.1:provided

Page 80: Mastering Maven 2.0 In 1 Hour V1.3

Dependency Analysis

‣ Analyze to help prune unneeded.‣ mvn dependency:analyze

Page 81: Mastering Maven 2.0 In 1 Hour V1.3

Dependency Analysis

‣ See if overrides are colliding.‣ mvn dependency:analyze-dep-mgt

Page 82: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn dependency:analyze

[WARNING] Unused declared dependencies found:[WARNING] org.slf4j:slf4j-log4j12:jar:1.4.2:compile[WARNING] log4j:log4j:jar:1.2.14:compile[WARNING] org.mortbay.jetty:jetty-management:jar:6.1.4:provided[WARNING] org.apache.wicket:wicket-extensions:jar:1.3.2:compile[WARNING] commons-collections:commons-collections:jar:3.1:compile

Page 83: Mastering Maven 2.0 In 1 Hour V1.3
Page 84: Mastering Maven 2.0 In 1 Hour V1.3

DeBugging

Page 85: Mastering Maven 2.0 In 1 Hour V1.3

Maven Debug Flags

‣ Output full error stacktraces.‣ mvn <anygoal> -e

‣ Output debug level operational info.‣ mvn <anygoal> -X‣ Always use when submitting questions or bug

reports.

Page 86: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn <anygoal> -X

[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-dependency-plugin:2.0:analyze' -->[DEBUG] (f) baseDir = /Users/mccm06/Documents/Teach/Courses/Mastering-Maven-1Hour/examples/maven-training.git/sample13-wicket-withdependencies[DEBUG] (f) failOnWarning = false[DEBUG] (f) project = MavenProject: com.ambientideas:sample13-wicket-withunneededdependencies:1.0-SNAPSHOT @ /Users/mccm06/Documents/Teach/Courses/Mastering-Maven-1Hour/examples/maven-training.git/sample13-wicket-withunneededdependencies/pom.xml[DEBUG] (f) scriptableFlag = $$%%%[DEBUG] (f) scriptableOutput = false[DEBUG] (f) verbose = false

Page 87: Mastering Maven 2.0 In 1 Hour V1.3

Debug Maven

‣ Waits on socket for debugger to connect.‣ mvnDebug <anygoal>

‣ Useful for debugging plugins.

‣ Can be used for unit test debugging.‣ mvnDebug test -DforkMode=none

Page 88: Mastering Maven 2.0 In 1 Hour V1.3

Debug Unit Tests

‣ Waits on socket for debugger to connect.

mvn test -Dmaven.surefire.debug

Page 89: Mastering Maven 2.0 In 1 Hour V1.3

GroovySupport

Page 90: Mastering Maven 2.0 In 1 Hour V1.3

Groovy Support‣ Groovy application code compilation.‣ mvn archetype:generate...gmaven-archetype-basic

‣ Groovy maven plugin authoring.‣ mvn archetype:generate...gmaven-archetype-mojo

‣ Joint compiler in both cases.

+

Page 91: Mastering Maven 2.0 In 1 Hour V1.3

Grails Support‣ Grails now fully supports Maven...‣ Archetype‣ Grails goals: create-controller, run-app, etc.

mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate -DarchetypeGroupId=org.grails \ -DarchetypeArtifactId=grails-maven-archetype \ -DarchetypeVersion=1.0-SNAPSHOT \ -DarchetypeRepository=http://snapshots.repository.codehaus.org \ -DgroupId=com.ambientideas -DartifactId=sample-grails

+

Page 92: Mastering Maven 2.0 In 1 Hour V1.3

command lineHelp!

Page 93: Mastering Maven 2.0 In 1 Hour V1.3

Maven Help Plugin

mvn help:describe -Dplugin=<anygoal>

‣ Lists and describes plugin goals.

Page 94: Mastering Maven 2.0 In 1 Hour V1.3

Maven Help Plugin

mvn help:system

‣ Outputs environment variables and system properties.

Page 95: Mastering Maven 2.0 In 1 Hour V1.3

Maven Help Plugin

mvn help:active-profiles

‣ See what profiles are being triggered by environment, files, params.

Page 96: Mastering Maven 2.0 In 1 Hour V1.3

Maven Help Plugin

mvn help:effective-pom

‣ Outputs the resultant pom.‣ Includes inherited sections.

Page 97: Mastering Maven 2.0 In 1 Hour V1.3

M2Eclipse

Page 98: Mastering Maven 2.0 In 1 Hour V1.3

m2eclipse Plugin‣ Advanced Eclipse GUI for Maven‣ Update site:

http://m2eclipse.sonatype.org/update-dev/

‣ Eclipse 3.2-3.4 compatibility‣ 3.5 support arrived May 09

‣ Features include:‣ Exclusion/Inclusion via clicks‣ Searching for artifacts‣ Dependency diagrams‣ Click-to-run Maven goals

+

Page 99: Mastering Maven 2.0 In 1 Hour V1.3

mvn eclipse:eclipseFile > Import > Existing Projects into Workspace

Set up Eclipse Classpath Variable M2_REPO

Page 100: Mastering Maven 2.0 In 1 Hour V1.3

mvn eclipse:eclipseFile > Import > Existing Projects into Workspace

Set up Eclipse Classpath Variable M2_REPO

Page 101: Mastering Maven 2.0 In 1 Hour V1.3

mvn eclipse:eclipseFile > Import > Existing Projects into Workspace

Set up Eclipse Classpath Variable M2_REPO

➊Outdated

Page 102: Mastering Maven 2.0 In 1 Hour V1.3

mvn eclipse:eclipseFile > Import > Existing Projects into Workspace

Set up Eclipse Classpath Variable M2_REPO

mvn eclipse:m2eclipseFile > Import > Existing Projects into Workspace

Outdated

Page 103: Mastering Maven 2.0 In 1 Hour V1.3

mvn eclipse:eclipseFile > Import > Existing Projects into Workspace

Set up Eclipse Classpath Variable M2_REPO

mvn eclipse:m2eclipseFile > Import > Existing Projects into Workspace

Outdated

Page 104: Mastering Maven 2.0 In 1 Hour V1.3

mvn eclipse:eclipseFile > Import > Existing Projects into Workspace

Set up Eclipse Classpath Variable M2_REPO

mvn eclipse:m2eclipseFile > Import > Existing Projects into Workspace

Outdated

Unnecessary

Page 105: Mastering Maven 2.0 In 1 Hour V1.3

mvn eclipse:eclipseFile > Import > Existing Projects into Workspace

Set up Eclipse Classpath Variable M2_REPO

mvn eclipse:m2eclipseFile > Import > Existing Projects into Workspace

File > Import > Maven Projects➌

Outdated

Unnecessary

Page 106: Mastering Maven 2.0 In 1 Hour V1.3

mvn eclipse:eclipseFile > Import > Existing Projects into Workspace

Set up Eclipse Classpath Variable M2_REPO

mvn eclipse:m2eclipseFile > Import > Existing Projects into Workspace

File > Import > Maven Projects➌

Outdated

Unnecessary

Page 107: Mastering Maven 2.0 In 1 Hour V1.3
Page 108: Mastering Maven 2.0 In 1 Hour V1.3
Page 109: Mastering Maven 2.0 In 1 Hour V1.3

Dependency Graph

Page 110: Mastering Maven 2.0 In 1 Hour V1.3

Exclusions

Page 111: Mastering Maven 2.0 In 1 Hour V1.3
Page 112: Mastering Maven 2.0 In 1 Hour V1.3

Eclipse command line Compiler<plugin>     <artifactId>maven‐compiler‐plugin</artifactId>     <configuration>         <compilerId>eclipse</compilerId>         <source>1.5</source>         <target>1.6</target>     </configuration>     <dependencies>        <dependency>           <groupId>org.codehaus.plexus</groupId>           <artifactId>plexus‐compiler‐eclipse</artifactId>           <version>1.5.1</version>        </dependency>     </dependencies></plugin>

Page 113: Mastering Maven 2.0 In 1 Hour V1.3

Source Code ControlIntegration

Page 114: Mastering Maven 2.0 In 1 Hour V1.3

Maven SCM Support

‣ Seamlessly integrates Maven processes with your SCM repo.‣ mvn scm:diff‣ Creates UNIX diff file

‣ mvn scm:tag‣ mvn scm:status

Page 115: Mastering Maven 2.0 In 1 Hour V1.3

Maven SCM Support

‣ Dozens of SCM systems supported.‣ CVS‣ Subversion‣ Git

Page 116: Mastering Maven 2.0 In 1 Hour V1.3

http://docs.codehaus.org/display/SCM/SCM+Matrix

Page 117: Mastering Maven 2.0 In 1 Hour V1.3

Maven SCM Support

mvn release:prepare

‣ Increments all pom.xml version tags.

Page 118: Mastering Maven 2.0 In 1 Hour V1.3
Page 119: Mastering Maven 2.0 In 1 Hour V1.3

ReactorPlugin

Page 120: Mastering Maven 2.0 In 1 Hour V1.3

Reactor Plugin

Purposes‣ Spawns a new nested Maven build.‣ Restart where a long-running build failed.‣ Selective build based on dependency.‣ Selective build based on scm-noticed changes.

Page 121: Mastering Maven 2.0 In 1 Hour V1.3

Reactor Plugin

In Use‣ Resume multi-module build starting with this

module.

$ mvn reactor:resume -Dfrom=mymodule

Page 122: Mastering Maven 2.0 In 1 Hour V1.3

Reactor Plugin

In Use‣ Build all modules that are dependents of mine.‣ Essentially, selective children.‣ I just made a change.‣ Want to ensure I didn’t break anything below me.

$ mvn reactor:make-dependents -Dmake.folders=mid1 or$ mvn reactor:make-dependents -Dmake.projects=com.ambientideas:mid1

Page 123: Mastering Maven 2.0 In 1 Hour V1.3

Reactor Plugin

In Use‣ Build all modules that this module depends on‣ Essentially, selective parents.‣ Teammate informed me.‣ Wants to make sure I test his changes.

$ mvn reactor:make -Dmake.folders=mid1 or$ mvn reactor:make -Dmake.projects=com.ambientideas:mid1

Page 124: Mastering Maven 2.0 In 1 Hour V1.3

Reactor Plugin

In Use‣ Build all modules that scm says had changed.‣ Essentially, build “dirty”.

$ mvn reactor:make-scm-changes

Page 125: Mastering Maven 2.0 In 1 Hour V1.3

RunningApps

Page 126: Mastering Maven 2.0 In 1 Hour V1.3

Exec Plugin

‣ Run any Java main class or external tool.

Page 127: Mastering Maven 2.0 In 1 Hour V1.3

Exec Plugin

‣ Run any Java main class or external tool.‣ Builds classpath from pom dependencies.

Page 128: Mastering Maven 2.0 In 1 Hour V1.3

Exec Plugin

‣ Run any Java main class or external tool.‣ Builds classpath from pom dependencies.‣ Primarily for testing.

Page 129: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn exec:java -Dexec.mainClass="com.foo.Main"

Page 130: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn exec:java -Dexec.mainClass="com.foo.Main"

or

Page 131: Mastering Maven 2.0 In 1 Hour V1.3

$ mvn exec:java -Dexec.mainClass="com.foo.Main"

or$ mvn exec:exec -Dexec.executable="winzip.exe" -Dexec.args="myfile.txt"

Page 132: Mastering Maven 2.0 In 1 Hour V1.3

AntIntegration

Page 133: Mastering Maven 2.0 In 1 Hour V1.3

Ant Build Generation

Why?‣ Dead simple.‣ Great for backport/legacy situations.

Page 134: Mastering Maven 2.0 In 1 Hour V1.3
Page 135: Mastering Maven 2.0 In 1 Hour V1.3

$ cd mymavenproj

Page 136: Mastering Maven 2.0 In 1 Hour V1.3

$ cd mymavenproj

$ mvn ant:ant

Page 137: Mastering Maven 2.0 In 1 Hour V1.3

$ cd mymavenproj

$ mvn ant:ant

$ lsbuild.xmlmaven-build.xmlmaven-build.properties

◀Yes, that’s it!

Page 138: Mastering Maven 2.0 In 1 Hour V1.3

AntRun Plugin

‣ Run any Ant task.‣ Leverage legacy in-house plugins.‣ Great way to copy arbitrary files.‣ Useful for echoing status or properties.

Page 139: Mastering Maven 2.0 In 1 Hour V1.3

<plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <id>echodir</id> <goals> <goal>run</goal> </goals> <phase>package</phase> <configuration> <tasks> <echo>BuildDir: ${project.build.directory}</echo> <copy todir="${myspecialfolder}"> <fileset dir="${myfiles}"/> </copy> </tasks> </configuration> </execution> </executions> </plugin></plugins>

Page 140: Mastering Maven 2.0 In 1 Hour V1.3

SitesReportsand

Page 141: Mastering Maven 2.0 In 1 Hour V1.3

Site Generation‣ Professional project web site

Page 142: Mastering Maven 2.0 In 1 Hour V1.3

Site Generation‣ Professional project web site‣ Templatizable

Page 143: Mastering Maven 2.0 In 1 Hour V1.3

Site Generation‣ Professional project web site‣ Templatizable‣ Contributors

Page 144: Mastering Maven 2.0 In 1 Hour V1.3

Site Generation‣ Professional project web site‣ Templatizable‣ Contributors‣ Licenses

Page 145: Mastering Maven 2.0 In 1 Hour V1.3

Site Generation‣ Professional project web site‣ Templatizable‣ Contributors‣ Licenses‣ Hyperlinked source ref

Page 146: Mastering Maven 2.0 In 1 Hour V1.3

Site Generation‣ Professional project web site‣ Templatizable‣ Contributors‣ Licenses‣ Hyperlinked source ref‣ Defect tracking

Page 147: Mastering Maven 2.0 In 1 Hour V1.3

Site Generation‣ Professional project web site‣ Templatizable‣ Contributors‣ Licenses‣ Hyperlinked source ref‣ Defect tracking‣ Dependencies

Page 148: Mastering Maven 2.0 In 1 Hour V1.3

Site Generation‣ Professional project web site‣ Templatizable‣ Contributors‣ Licenses‣ Hyperlinked source ref‣ Defect tracking‣ Dependencies‣ Plugins

Page 149: Mastering Maven 2.0 In 1 Hour V1.3

Project Info

Page 150: Mastering Maven 2.0 In 1 Hour V1.3

Report Generation

‣ Unit test reports‣ Test coverage reports‣ Checkstyle and PMD‣ Javadocs‣ Tag list (TODO)

Page 151: Mastering Maven 2.0 In 1 Hour V1.3

Report

Page 152: Mastering Maven 2.0 In 1 Hour V1.3

What’s New?

Page 153: Mastering Maven 2.0 In 1 Hour V1.3

Maven 2.0.10‣ Stability.‣ Unit and integration tests.‣ End of the line for 2.0.X.

Page 154: Mastering Maven 2.0 In 1 Hour V1.3

Maven 2.1‣ Parallel downloads (Don Brown)‣ Encrypted passwords‣ Drop in replacement

Page 155: Mastering Maven 2.0 In 1 Hour V1.3

What’s Next?

Page 156: Mastering Maven 2.0 In 1 Hour V1.3

Maven 3.0‣ Encrypted passwords (from 2.1)‣ Mercury engine‣ Parallel downloads (determinate)‣ New resolver

‣ Tyco OSGi bundle builder

Page 157: Mastering Maven 2.0 In 1 Hour V1.3

Build Nirvana

Page 158: Mastering Maven 2.0 In 1 Hour V1.3
Page 159: Mastering Maven 2.0 In 1 Hour V1.3

MatthewTwitter @matthewmccull

Blog http://www.ambientideas.com/blog sidebar has all my social media links

Email [email protected]

GitHub http://github.com/matthewmccullough

Page 160: Mastering Maven 2.0 In 1 Hour V1.3

Maven Homepagehttp://maven.apache.org/

Maven Sonatype eBookhttp://www.sonatype.com/book/

Matthew’s Maven Bookmarkshttp://delicious.com/matthew.mccullough/maven

GMaven Pluginhttp://groovy.codehaus.org/GMaven

Resources

Page 161: Mastering Maven 2.0 In 1 Hour V1.3

Maven Superpomhttp://maven.apache.org/pom.html#The_Super_POM

Sonatype Central Repohttp://repository.sonatype.org/

Java.net Repohttp://download.java.net/maven/2/

Archetype Mini-Guidehttp://maven.apache.org/guides/mini/guide-creating-archetypes.html

Resources

Page 162: Mastering Maven 2.0 In 1 Hour V1.3

GMaven Pluginhttp://groovy.codehaus.org/GMaven

Grails Maven Integrationhttp://www.grails.org/Maven+Integration

m2eclipse Plugin Homepagehttp://m2eclipse.codehaus.org/

m2eclipse Eclipse Update Sitehttp://m2eclipse.sonatype.org/update-dev/

m2eclipse Documentationhttp://docs.codehaus.org/display/MAVENUSER/Dealing+with+Eclipse-based+IDE

Resources

Page 163: Mastering Maven 2.0 In 1 Hour V1.3

Archetype Guidehttp://maven.apache.org/guides/mini/guide-creating-archetypes.html

Sonatype eBook Archetype Chapterhttp://propellors.net/maven/book/archetypes.htmlhttp://www.sonatype.com/books/maven-book/reference/archetypes.html

Archetype create-from-project Mojohttp://maven.apache.org/plugins/maven-archetype-plugin/create-from-project-mojo.html

JavaWorld Reporting Articlehttp://www.javaworld.com/javaworld/jw-02-2006/jw-0227-maven.html

Resources

Page 164: Mastering Maven 2.0 In 1 Hour V1.3

Maven Dependency Pluginhttp://maven.apache.org/plugins/maven-dependency-plugin/

Maven AntRun Pluginhttp://maven.apache.org/plugins/maven-antrun-plugin/

Maven Exec Pluginhttp://mojo.codehaus.org/exec-maven-plugin/usage.html

SuperPOM in SVNhttp://svn.apache.org/viewvc/maven/components/tags/maven-2.0.9/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml?view=markup

Resources

Page 165: Mastering Maven 2.0 In 1 Hour V1.3

‣ http://flickr.com/photos/chanchan222/2883910690/‣ http://flickr.com/photos/themarmot/3173506262/‣ http://commons.wikimedia.org/wiki/File:Napoleon4.jpg

Image Credits