Getting Started with Apache Maven
Getting Started with Apache Maven will introduce you to the world of synergized development in the Maven ecosystem. The course logically explains the various concepts of the tool, and shows how to proceed from simple assignments to complex ones.
Maven is not simply a tool to invoke compilers and utilities, but it is also an approach to easily constructing your project by accessing its ever-expanding world of tools and libraries.
You will learn how to pull in dependencies simply by specifying their coordinates, how to customize your lifecycle with plugins, and see how easy it can be to create a project website. You will see how to generate reports on your code that will enable understanding and will let you know when your developers are running into problems. You will understand how to scale up from simple projects to multi-module ones.
This video course walks you through the steps by presenting examples, starting with very basic ones, and growing to more elaborate ones once you have mastered the basics.
About the Author
Russell Gold has been a Java developer since 1996 and is the author of the open-source project, HttpUnit, as well as a handful of smaller open source projects. He is also a committer on the Codehaus Mojo project, where he maintains the idlJ and RMIC plugins.
He has spent the major part of his career looking for better ways to develop software, is a staunch advocate of agile development, and has embraced Maven as a major advance in build philosophy and technology. Russell is currently employed by Oracle.
I would like to express gratitude to my wife Gwen, for her patience as I spent many hours working on this project, as well as to my boss and co-workers who have offered encouragement and feedback.
With all the build systems available, it can be hard to understand what makes Maven special. Understanding some history can make this clearer.
Before getting started, you need to install Maven. A simple procedure is described.
All Maven artifacts are referred to using Maven Coordinates. This is the organizational structure of the repository.
Maven's approach to builds is based on the lifecycle. Examining a build is a way to start seeing how it works.
Maven uses plugins to perform build steps. Plugin mojos are identified by their associated goals and bound to build phases.
Add dependencies to a project by specifying their Maven coordinates. Maven will do the rest.
Some dependencies should only be applied to the test classpaths. The scope element controls this.
Using a dependency often means depending on its own dependencies. Maven makes this straightforward.
When many projects use the same dependency, Maven can provide a single place to define it for all of them.
When a dependency is used only by a small number of projects, Maven can define a single place to define the versions to use.
Sometimes you need to reconfigure a build step. Specify a plugin by coordinates and add the configuration data.
You can add steps to a Maven build. Specify a plugin and add an execution element to say what to run and when.
Code generation is generally a two-step process: first generate and then compile. Maven requires only one setting.
When many projects use the same plugin, Maven can provide a single place to define it for all of them.
A lot of useful plugins have been written for Maven builds. Learn how to find what's available.
Controlling the Build
Some build values and parameters can change frequently. Build properties allow convenient updating of these values.
Sometimes it is useful to choose which goals will be run during a build. Placing them in a profile allows them to run conditionally.
The condition for performing certain actions can depend on the value of a property. Profile activation can be made to depend on a property value.
Build behavior may depend on the presence of various environments. Build profiles can be triggered based on files, system, or JDK versions.
Some behavior can be specific to a single developer. Controlling definitions can be placed in settings.xml.
The Project Website
Every important project should have a website. Maven can generate one with little work.
One good use of a project website is to monitor the health of the code. Use Maven to add automatically generated code reports to the site.
Most website content needs to be defined by the development team. Maven provides a simple syntax to create pages.
The default appearance of a Maven site is not for every project. Maven allows developers to customize its look.
A website needs to be uploaded to a server to be useful. Configure Maven to do this automatically.
The Maven Release Process
Projects can only use artifacts found in a repository. Maven can upload artifacts in the deploy phase.
Once an artifact is published, it should not be changed. Snapshots can be published over and over again to test an artifact before releasing it.
Releasing software requires a number of steps. Use the Maven release:prepare goal to push and tag the release source to CM.
Once the code to be released is tagged in CM, it needs to be built and published. Use the Maven release:perform goal to do this.
Open source projects should be published to Maven Central for general availability. There are several requirements that must be met before publishing.
There are some differences in the process for publishing to Maven Central. Use the repository manager to verify and release artifacts.
Complex projects generate multiple artifacts, but a Maven project only builds a single artifact. Use inheritance and aggregation to create large projects.
Large projects can take a long time to build. Use the -rf switch to rebuild from the middle of a project.
Complex projects need complex websites. Understand how the site plugin handles inheritance.
Releasing a multi-module project can be cumbersome. Learn about command-line shortcuts.
Maven Tricks and Patterns
Complex projects may require more sophisticated scripting than Maven supports. The antrun plugin allows access to ant from Maven.
An ant script can access artifacts from a Maven repository. Appropriate taskdefs can use Maven coordinates directly.
End users don't usually access Maven repositories to obtain programs. Use Maven to create an installer.
Functional tests are sometimes created before the code that satisfies them is ready. The failsafe plugin can run them without failing.
Both, the default plugin bindings and transitive dependencies, can cause problems. Use Maven features to turn them off when needed.