 ------
Release Notes - Maven 3.0-beta-1
 ------
Brett Porter
 ------
23 April 2010
 ------

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Maven 3.0-beta-1

  The Apache Maven team would like to announce the release of Maven 3.0-beta-1.

  Maven 3.0-beta-1 is {{{../../download.html} available for download}} from the 'preview' section.

  Maven is a software project management and comprehension tool. Based on the concept of a project object model
  (POM), Maven can manage a project's build, reporting and documentation from a central place.

  Maven 3 aims to ensure backward compatibility with Maven 2, improve usability, increase performance, allow safe embedding, and pave the way
  to implement many highly demanded features.

  The core release is independent of the plugins available. Further releases of plugins will be made separately.
  See the {{{../../plugins/index.html} Plugin List}} for more information.

  We hope you enjoy using Maven! If you have any questions, please consult:

    * the web site: {{http://maven.apache.org/}}

    * the maven-user mailing list: {{http://maven.apache.org/mail-lists.html}}
    
#parse("release-notes.txt")

* Complete Release Notes

    * See {{{../../release-notes-3.0.x.html}complete release notes for 3.0.x}}

    * See {{{../../release-notes-all.html}complete release notes for 2.x}}
