Whymaven
From ebxmlrr
Background and Context
See here for details on why I created this page.
At present this page is just a brain dump. It will be organized better over time. I have borrowed some text from here.
Benefits for Developer of Maven Project "XYZ"
- Quick Start - Getting started is really easy
- new project can be created instantly from many available archtypes (templates)
- Lots of good doumentation available
- Lots of help at users@maven.apache.org
- Supported by popular IDEs like NetBeans, Eclipse, IDEA. NetBeans has the best maven support via mevenide2 NetBeans plugin
- Common and familiar project directory structure across projects
- Project best practices are enforced and obseved consistently across team
- Local repository avoids having copies of same jars in different projects
- <quoted>Promotes modular design of code by making it simple to manage mulitple projects it allows the design to be laid out into muliple logical parts, weaving these parts together through the use of dependency tracking in pom files<quoted>
- Dependency management - Keeping track of project dependencies and their versions is really simple
- Project that use same version of same jars can share the same copy of the jar
- Even transitive dependencies (dependencies of dependencies) are managed
- Project packaging - Packaging the project into jar, war, zip etc. is just part of the automatic stages of a projects lifecycle.
- No need to write ant targets to do this as the built-in maven-jar-plugin will take care of it.
- Assembling custom packages: When you need more than simple project packaging the maven-assembly-plugin allows you to do the following:
- Create a customized assembly as a binary distribution from a Maven project that includes supporting scripts, configuration files, and all runtime dependencies
- Project Life Cycle Management - Standard life cycle stages are defined for all projects with default behavior (e.g. compile phase compiles the code)
- Ability to add custom behavior to each lifecycle stage (e.g. run wsimport during generate-sources phase)
- Resource Management - Project resources such as property files etc. are managed and packaged in jar/war etc. automatically using maven-resource-plugin
- automate the copying and filtering of resources (e.g. put project release name in a property value)
- Test automation - Project unit and system test automation is enabled via maven-surefire-plugin
- Test may still be written in junit or whatever
- Project shell script generation - Automatically generates windows and linux shell scripts for a project using appassembler-maven-plugin (unobvious name)
- Takes into account the projects dependencies when creating classpath variable etc. within the scripts
- Project Web site generation - Automatically generates a consistent web site for the project using maven-site-plugin
- Standard content includes (Project team info, mailing list info, source repository info, bug tracking info, project dependency info, project releases and download info, test results info for each release test coverage reports etc.
- Option to customize using custom content
- Need a good example here??
- Project Release Automation - Automatically manage the drudgery involved in cutting a release of the project using the maven-release-plugin
- Huge time saver
- Avoids errors
- Automatic checks to make sure release does not depend on unrelease SNAPSHOT versions of any dependency
- Automatic tagging of source tree (overridable)
- Automatic naming for current and next release based on conventions (overridable)
- Change Reporting - Automatic Generation of Change Report for a release using maven-changes-plugin
- Will automatically generate a report from issue tracking or a change document for informing the user community about a new version
- Making Release Available for Download - Deploy your projects new release to a server usiung maven-deploy-plugin, so otherc can discover and download it
- Automatic secure upload of bits to server to the right places
- Smaller Distributions - Distribution of jars etc. from a project is smaller as it need not distribute its dependency jar
- Dependency jars are automatically pulled by a consuming maven project
- Comparing Release - Automatically compare changes between 2 releases using maven-changelog-plugin
Benefits for Developer Who Consumes Maven Project "XYZ"
- Consistent naming convention for jars from maven project "XYZ" and other maven projects
- Easy to understand and track changes to project "XYZ"
- All jars have version in the file name
- Need some more here...
