 ------
 Maven Developer Centre
 ------
 Vincent Siveton
 Brett Porter
 ------
 2015-02-14
 ------

~~ 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:
~~ https://maven.apache.org/doxia/references/apt-format.html

Maven Developer Centre

  This documentation centre is for people who are Maven developers, or would like to contribute.

  If you cannot find your answers here, feel free to ask the {{{mailto:dev@maven.apache.org}Maven Developer List}}.

* Contributors Resources

  * {{{../guides/development/guide-helping.html}Guide to helping with Maven}}

  * {{{../guides/development/guide-maven-development.html}Developing Maven}}

  * {{{../guides/development/guide-building-maven.html}Building Maven}}

  * {{{../scm.html}Source Code}}

  * {{{../continuous-integration.html}Continuous Integration}}

  * {{{../plugin-developers/common-bugs.html} Common Bugs and Pitfalls}}

  * {{{../project-roles.html}Apache Maven Project Roles}}

  []

* Committers Resources

** General Resources

  * {{{./welcome-to-new-committers.html}Guide for new Maven committers}}

  * {{{./committer-environment.html}Committer Environment}}

  * {{{./committer-settings.html}Committer Settings}}
  
  * {{{./java6.html}Java 6 in Plugins and Shared Components}}

  * {{{./retirement-plan-plugins.html}Retirement Plan for Plugins}}

  * {{{./dependency-policies.html}Maven Dependency Policies}}

  []

* Developers Conventions

  There are a number of conventions used in the Maven projects, which contributors and developers alike should follow for
  consistency's sake.

  * {{{./conventions/code.html}Maven Code Style And Conventions}}

  * {{{./conventions/jira.html}Maven JIRA Convention}}

  * {{{./conventions/git.html}Maven Git Convention}}

  []

 <<Note>>: If you cannot find your answers here, feel free to ask the {{{mailto:dev@maven.apache.org}Maven Developer List}}.

* Making Releases

  * {{{./release/pmc-gpg-keys.html}Making GPG Keys}}

  * {{{./release/index.html}Release Process}}

  []

* Maven Website

  * {{{./website/index.html}Deploy Maven Website}}
  
  []

* Others Resources

  * {{{https://www.apache.org/dev/}ASF Development Infrastructure Information}}

  * {{{https://www.apache.org/foundation/}About the Apache Software Foundation}}

  []

~~TODO: tasks as buttons?

~~TODO: de-dupe with existing documents in community

~~TODO: clean up, have cookbook with more in depth documents like cutting releases, etc.
