 ------
 Developers centre - Committer Settings
 ------
 Vincent Siveton
 Dennis Lundberg
 ------
 2011-05-23
 ------

~~ 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

Introduction

 This document is intended to set up the Maven committer settings, i.e. the <<<$\{user.home\}/.m2/settings.xml>>>.

* Enable Apache Servers

 Maven uses several servers configuration to deploy snapshots, releases and documentation on the Apache servers.
 You need to tell to Maven what your Apache username is. Please note that the servers now use your LDAP credentials,
 which may differ from your old SVN credentials.

 <<It is highly recommended to use Maven's {{{../guides/mini/guide-encryption.html} password encryption capabilities}} for your passwords>>.

+-----+
<settings>
  ...
  <servers>
    <!-- To publish a snapshot of some part of Maven -->
    <server>
      <id>apache.snapshots.https</id>
      <username> <!-- YOUR APACHE LDAP USERNAME --> </username>
      <password> <!-- YOUR APACHE LDAP PASSWORD --> </password>
    </server>
    <!-- To publish a website of some part of Maven -->
    <server>
      <id>apache.website</id>
      <username> <!-- YOUR APACHE LDAP USERNAME --> </username>
      <!-- Either
      <password>...</password>
      or
      <privateKey>...</privateKey>
      ---> 
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
    </server>
    <!-- To stage a release of some part of Maven -->
    <server>
      <id>apache.releases.https</id>
      <username> <!-- YOUR APACHE LDAP USERNAME --> </username>
      <password> <!-- YOUR APACHE LDAP PASSWORD --> </password>
    </server>
    <!-- To stage a website of some part of Maven -->
    <server>
      <id>stagingSite</id> <!-- must match hard-coded repository identifier in site:stage-deploy -->
      <username> <!-- YOUR APACHE LDAP USERNAME --> </username>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
    </server>
    ...
  </servers>
</settings>
+-----+

 You also need to be a member of the group <<<apcvs>>> and <<<maven>>> on <<<people.apache.org>>>.

 
* Enable sending announcement e-mails

 To be able to send out announcements of Maven releases you need to add a couple
 of properties to the <<<apache-release>>> profile.

+-----+
<settings>
  ...
  <profiles>
    <profile>
      <id>apache-release</id>
      <properties>
        <apache.availid> <!-- YOUR APACHE LDAP USERNAME --> </apache.availid>
        <smtp.host> <!-- YOUR SMTP SERVER --> </smtp.host>
      </properties>
    </profile>
    ...
  </profiles>
</settings>
+-----+
