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

Mastering Maven 2.0 In 1 Hour V1.3

Aug 30, 2014

Download

Technology

Presentation of Mastering Maven to the SDJUG team in San Diego, CA.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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