Welcome, Guest! Log In | Create Account

Whymaven

From ebxmlrr

Jump to: navigation, search

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"

  1. Quick Start - Getting started is really easy
  2. Supported by popular IDEs like NetBeans, Eclipse, IDEA. NetBeans has the best maven support via mevenide2 NetBeans plugin
  3. Common and familiar project directory structure across projects
  4. Project best practices are enforced and obseved consistently across team
  5. Local repository avoids having copies of same jars in different projects
  6. <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>
  7. 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
  8. 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.
  9. 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
  10. 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)
  11. 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)
  12. Test automation - Project unit and system test automation is enabled via maven-surefire-plugin
    • Test may still be written in junit or whatever
  13. 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
  14. 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??
  15. 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)
  16. 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
  17. 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
  18. 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
  19. Comparing Release - Automatically compare changes between 2 releases using maven-changelog-plugin


Benefits for Developer Who Consumes Maven Project "XYZ"

  1. Consistent naming convention for jars from maven project "XYZ" and other maven projects
  2. Easy to understand and track changes to project "XYZ"
    • All jars have version in the file name
  3. Need some more here...