<?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.
  -->
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.derby</groupId>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>10</version>
  </parent>
  <artifactId>derby-project</artifactId>
  <version>ALPHA_VERSION</version>
  <packaging>pom</packaging>
  <name>Apache Derby Project</name>
  <description>Apache Derby is an open source relational database implemented entirely in Java.</description>
  <url>http://db.apache.org/derby/</url>
  <inceptionYear>2004</inceptionYear>
  <organization>
    <name>Apache Software Foundation</name>
    <url>http://db.apache.org/</url>
  </organization>
  <licenses>
    <license>
      <name>Apache 2</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>
  <mailingLists>
    <mailingList>
      <name>Derby User List</name>
      <subscribe>derby-user-subscribe@db.apache.org</subscribe>
      <unsubscribe>derby-user-unsubscribe@db.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/db-derby-user/</archive>
      <otherArchives>
        <otherArchive>http://www.nabble.com/Apache-Derby-Users-f93.html</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Derby Developer List</name>
      <subscribe>derby-dev-subscribe@db.apache.org</subscribe>
      <unsubscribe>derby-dev-unsubscribe@db.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/db-derby-dev/</archive>
      <otherArchives>
        <otherArchive>http://www.nabble.com/Apache-Derby-Developers-f91.html</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Derby Commit List</name>
      <subscribe>derby-commits-subscribe@db.apache.org</subscribe>
      <unsubscribe>derby-commits-unsubscribe@db.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/db-derby-commits/</archive>
    </mailingList>
  </mailingLists>
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/DERBY</url>
  </issueManagement>
  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/db/derby/code/trunk</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/db/derby/code/trunk</developerConnection>
    <url>http://svn.apache.org/viewcvs.cgi/db/derby/code/trunk/?root=Apache-SVN</url>
  </scm>

  <modules>
    <module>engine</module>
    <module>net</module>
    <module>client</module>
    <module>tools</module>
    <module>optionaltools</module>
    <module>war</module>
    <module>derbyLocale_cs</module>
    <module>derbyLocale_de_DE</module>
    <module>derbyLocale_es</module>
    <module>derbyLocale_fr</module>
    <module>derbyLocale_hu</module>
    <module>derbyLocale_it</module>
    <module>derbyLocale_ja_JP</module>
    <module>derbyLocale_ko_KR</module>
    <module>derbyLocale_pl</module>
    <module>derbyLocale_pt_BR</module>
    <module>derbyLocale_ru</module>
    <module>derbyLocale_zh_CN</module>
    <module>derbyLocale_zh_TW</module>
  </modules>

  <build>
    <plugins>
      <!-- Generate signatures for the artifacts using GnuPG.
           This requires that you have GnuPG installed and in the search path.
        -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <executions>
          <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
              <goal>sign</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

  </plugins>
  </build>

  <!-- Properties used throughout the build / install. -->
  <properties>
    <!-- RELEASE_DATA: How to specify your signing key passphrase.
         If you're not using an agent, you will have to enter the signing key
         phassphrase a lot of times. Since this file will be deployed, DO NOT
         specify the passphrase here. If you don't have an agent running,
         use a command-line property when invoking maven
         (-Dgpg.passpharse=PASSPHRASE) or configure GnuPG to obtain your
         passphrase another way.
    <gpg.passphrase>DO_NOT_SPECIFY_YOUR_PASSPHRASE_HERE</gpg.passphrase>
      -->
    <gpg.useagent>true</gpg.useagent>
    <!-- Have Maven generate checksums (MD5 and SHA1) for the artifacts. -->
    <createChecksum>true</createChecksum>
    <!-- All plugins should use this value.
         See http://docs.codehaus.org/display/MAVENUSER/POM+Element+for+Source+File+Encoding
      -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- Specifies whether to package the sane (debug) or insane jar.
         Valid values: sane|insane
      -->
    <sanity>insane</sanity>
  </properties>

</project>
