<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
    http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <servers>
    <server>
      <id>people.apache.org</id>
      <username>${committer.id}</username>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
    </server>
    <server>
      <id>apache.releases</id>
      <username>${committer.id}</username>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
    </server>
    <server>
      <id>apache.website</id>
      <username>${committer.id}</username>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
    </server>
    <server>
      <id>apache.snapshots</id>
      <username>${committer.id}</username>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
    </server>
    <server>
      <id>apache.snapshots.https</id>
      <username>${committer.id}</username>
      <password>${committer.password}</password>
    </server>
    <server>
      <id>apache.releases.https</id>
      <username>${committer.id}</username>
      <password>${committer.password}</password>
    </server>
  </servers>

  <profiles>
    <profile>
      <id>apache.any23</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <mavenExecutorId>forked-path</mavenExecutorId>
        <gpg.keyname>${gpg.keyname}</gpg.keyname>
        <gpg.passphrase>${gpg.passphrase}</gpg.passphrase>
      </properties>
      <repositories>
        <repository>
          <id>any23-repository-external</id>
          <url>http://any23.googlecode.com/svn/repo-ext</url>
        </repository>
        <!-- Specific repository for Aduna / Sesame related dependencies. -->
        <repository>
          <id>aduna-software-release-repo</id>
          <name>Aduna SW Release Repository</name>
          <url>http://repo.aduna-software.org/maven2/releases</url>
          <layout>default</layout>
        </repository>
      </repositories>
    </profile>
  </profiles>

</settings>
