Maven's Goals

Maven's primary goal is to allow a developer to comprehend the complete state of a development effort in the shortest period of time. In order to attain this goal there are several areas of concern that Maven attempts to deal with:

  • Making the build process easy
  • Providing a uniform build system
  • Providing quality project information
  • Providing clear development process guidelines
  • Providing guidelines for thorough testing practices
  • Providing coherent visualization of project information
  • Allowing transparent migration to new features

Making the build process easy

While using Maven doesn't eliminate the need to know about the underlying mechanisms, in our case Jelly and Werkz, Maven does provide a lot of shielding from the harrowing details that may thwart new users. Maven has an easy installation process, that we strive to make comfortable for novices and experts alike, that when complete allows for very easy building while providing a great deal of power.

Providing a uniform build system

Maven allows a project to build using its project object model (POM) and a single set of Ant build files that are shared by all projects using Maven thus providing a uniform build system. Once you familiarize yourself with how one Maven project builds you automatically know how all Maven projects build saving you immense amounts of time when trying to navigate many projects.

Providing quality project information

Maven provides a full gamut of useful project information that is in part taken from your POM and in part generated from your project's sources. Maven currently provides the following information about your project:

  • Change log document created directly from repository information.
  • Cross referenced sources
  • Source metrics
  • Mailing lists
  • Developer list
  • Dependency list
  • Unit test reports including coverage

As Maven improves the information set provided will improve, all of which will be transparent to users of Maven.

Providing clear development process guidelines

As part of using Maven you have access to the development process guidelines that have been gathered by the collective of projects that use Maven for development. This is an area that needs development and general improvement, but as more projects use Maven more ideas on general develop process will collect and all those ideas will be propagated to all Maven users.

Providing guidelines for thorough testing practices

Maven provides an easy way to start unit testing right from your project's inception and Maven can enforce rules so that testing is made to be an integral part of your project's development lifecycle. Maven also provides a general pattern for integration unit tests and we are currently integrating Quilt for coverage testing.

Specification, execution, and reporting of your projects unit tests are part of the normal build cycle using Maven. The Junit framework and corresponding support in Ant provide the unit testing harness. Current unit testing best practices were used as guidelines:

  • Keeping your test source code in a separate, but parallel source tree
  • Using test case naming conventions to locate and execute tests
  • Have test cases setup their environment and don't rely on customizing the build for test preparation.

In-container unit testing of web based applications is provided by the Cactus testing framework. Maven provides a testing harness for these integration unit tests in the same fashion as regular unit tests. Preliminary support for in-container testing includes Tomcat 4.x based containers.

Providing coherent visualization of project information

In order to aid in that comprehension, it will be necessary not only to produce metrics for the source base in question but to provide a terse graphical representation of the state of development. The following is an excerpt from the beginning of Edward R. Tufte's book The Visual Display of Quantitative Information:

Excellence in statistical graphics consists of complex ideas communicated with clarity, precision, and efficiency. Graphical displays should:

  • show the data
  • induce the viewer to think about the substance rather than about methodology, graphic design, the technology of graphic production, or something else
  • avoid distorting what the data have to say
  • present many numbers in a small space
  • make large data sets coherent
  • encourage the eye to compare different pieces of data
  • reveal the data at several levels of detail, from a broad overview to the fine structure
  • serve a reasonably clear purpose: description, exploration, tabulation, or decoration
  • be closely integrated with the statistical and verbal descriptions of a data set.

Allowing transparent migration to new features

Maven provides an easy way for Maven clients to update their installations so that they can take advantage of any changes that been made to Maven proper. As everything is controlled by a single set of build files this simply involves updating those build files and any accompanying data structures that are part of the Maven installation. As a user, you simply have to update Maven and you have access to all new features. We are also working on an easy way to propagate changes in the POM so error prone manual editing may be avoided.