Maven is a project manager, not a build manager like Ant, hence the pom.xml file (Project object model). It tries to use a certain format to where the files are on the system to make it simpler to include dependencies.
$ mvn archetype:generate
This generates a simple template. archetype is the plugin, generate is the goal.
$ mvn help:effective-pom
This generates the entire POM that includes the minimal pom.xml including any parent POMs, user settings, and active profiles.
Maven doesn’t know how to compile your code or make a JAR file, but the plugins it uses do. Basic maven is a basic shell that knows how to:
parse the command-line manage a classpath parse a POM file download Maven plugins Maven Lifecycle Plugin goals can be attached to lifecycle phases (e.g. install, test). Each phase may have 0 or more goals attached to it. Example phases:
- process-resources
- compile
- process-classes
- process-test-resources
- test-compile
- test
- prepare-package
- package
When mvn fires is launches all phases before it in the lifecycle.
You can also just specify the plugin goals, but that is a lot more tedious
$ mvn resources:resources compiler:compile resources:testResources surefire:test jar:jar install:install
4 (really 5) definitions create the coordinate system for a product:
- groupId - reverse domain name
- artifactId - unique identifier under the group representing a single project
- packaging - package type (jar, war, ear)
- version - a specific release of a project
- classifier (rarely used)
Maven download artifacts and plugins from a remote repository to a your local machine and stores them in your local Maven repository (~/.m2/repository). install phase installs a .jar into the local repository. A repository contains the .jar and the .pom of what it depends on.
You can generate a site and documentation by doing the following:
$ mvn site
Generates javadoc, and other custom reports
This can tell you what all of the dependencies are:
$ mvn dependency:resolve
A prettier way to see the dependency tree
$ mvn dependency:tree
I got a lot of useful information for this post from Maven By Example