<?xml version="1.0" encoding="UTF-8"?>
<!--

 Copyright 2001-2005 The Apache Software Foundation.
 
 Licensed 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>
  <pomVersion>3</pomVersion>
  
  <name>Logging</name>
  <id>commons-logging</id>
  <currentVersion>1.0.6-dev</currentVersion>
  <inceptionYear>2001</inceptionYear>
  <shortDescription>Commons Logging</shortDescription>
  <description>
    Commons Logging is a thin adapter allowing configurable bridging to other,
    well known logging systems.
  </description>
  <logo>/images/logo.png</logo>
  
  <url>http://jakarta.apache.org/commons/${pom.artifactId.substring(8)}/</url>
  <package>org.apache.commons.${pom.artifactId.substring(8)}</package>

  <organization>
    <name>The Apache Software Foundation</name>
    <url>http://jakarta.apache.org</url>
    <logo>http://jakarta.apache.org/images/original-jakarta-logo.gif</logo>
  </organization>

  <licenses>
	<license>
    	<name>The Apache Software License, Version 2.0</name>
    	<url>/LICENSE.txt</url>
    	<distribution>repo</distribution>
	</license>
  </licenses>
  
  <gumpRepositoryId>jakarta</gumpRepositoryId>
  <issueTrackingUrl>http://issues.apache.org/bugzilla/</issueTrackingUrl>
  <siteAddress>cvs.apache.org</siteAddress>
  <siteDirectory>/www/jakarta.apache.org/commons/${pom.artifactId.substring(8)}/</siteDirectory>
  <distributionDirectory>/www/jakarta.apache.org/builds/jakarta-commons/${pom.artifactId.substring(8)}/</distributionDirectory>
  
  <repository>
    <!--<connection>scm:cvs:${logging.cvs}:jakarta-commons/logging/</connection>-->
    <connection>scm:svn:http://svn.apache.org/repos/asf/jakarta/commons/proper/${pom.artifactId.substring(8)}/trunk</connection>
    <url>http://svn.apache.org/repos/asf/jakarta/commons/proper/${pom.artifactId.substring(8)}/trunk</url>
  </repository>
  
  <versions>
      <version>
          <id>1.0.1</id>
          <name>1.0.1</name>
          <tag>LOGGING_1_0_1</tag>
      </version>
      <version>
          <id>1.0.2</id>
          <name>1.0.2</name>
          <tag>LOGGING_1_0_2</tag>
      </version>      
      <version>
          <id>1.0.3</id>
          <name>1.0.3</name>
          <tag>LOGGING_1_0_3</tag>
      </version>
      <version>
          <id>1.0.4</id>
          <name>1.0.4</name>
          <tag>LOGGING_1_0_4</tag>
      </version>
  </versions>
  
  <mailingLists>
    <mailingList>
      <name>Commons Dev List</name>
      <subscribe>commons-dev-subscribe@jakarta.apache.org</subscribe>
      <unsubscribe>commons-dev-unsubscribe@jakarta.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/eyebrowse/SummarizeList?listName=commons-dev@jakarta.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>Commons User List</name>
      <subscribe>commons-user-subscribe@jakarta.apache.org</subscribe>
      <unsubscribe>commons-user-unsubscribe@jakarta.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/eyebrowse/SummarizeList?listName=commons-user@jakarta.apache.org</archive>
    </mailingList>
  </mailingLists>

  <developers>
    <developer>
      <name>Morgan Delagrange</name>
      <id>morgand</id>
      <email>morgand at apache dot org</email>
      <organization>Apache</organization>
      <roles><role>Java Developer</role></roles>
    </developer>
    <developer>
      <name>Rodney Waldhoff</name>
      <id>rwaldhoff</id>
      <email>rwaldhoff at apache org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Craig McClanahan</name>
      <id>craigmcc</id>
      <email>craigmcc at apache org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Scott Sanders</name>
      <id>sanders</id>
      <email>sanders at apache dot org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Robert Burrell Donkin</name>
      <id>rdonkin</id>
      <email>rdonkin at apache dot org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Peter Donald</name>
      <id>donaldp</id>
      <email>donaldp at apache dot org</email>
      <organization></organization>
    </developer>
    <developer>
      <name>Costin Manolache</name>
      <id>costin</id>
      <email>costin at apache dot org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Richard Sitze</name>
      <id>rsitze</id>
      <email>rsitze at apache dot org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Juozas Baliuka</name>
      <id>baliuka</id>
      <email>baliuka@apache.org</email>
      <organization></organization>
      <roles>
        <role>Java Developer</role>
      </roles>
    </developer>
    <developer>
      <name>Simon Kitching</name>
      <id>skitching</id>
      <email>skitching@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
  </developers>
  
  <dependencies>
    
    <dependency>
      <id>log4j</id>
      <version>1.2.6</version>
    </dependency>
    
    <dependency>
      <id>logkit</id>
      <version>1.0.1</version>
    </dependency>

    <dependency>
      <id>junit</id>
      <version>3.7</version>
    </dependency>
    
    <dependency>
      <id>avalon-framework</id>
      <version>4.1.3</version>
    </dependency>
    
  </dependencies>
  <build>
     <nagEmailAddress>commons-dev@jakarta.apache.org</nagEmailAddress>
    <sourceDirectory>src/java</sourceDirectory>
    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
    <sourceModifications>
      <sourceModification>
        <className>java.util.logging.Logger</className>
        <excludes>
          <exclude>**/Jdk14Logger.java</exclude>
        </excludes>
      </sourceModification>
    </sourceModifications>
    <unitTest>
        <!--
At the moment there are problems running the unit tests under maven.
the unit tests run by custom ant target which perform configuration
before the tests are run.
There is no easy way to run these under maven at the moment.
        -->
        <includes>
            <include>**/AvalonLoggerTest.java</include>
        </includes>
    </unitTest>
  </build>

  <reports>
    <report>maven-javadoc-plugin</report>
    <report>maven-jdepend-plugin</report>
    <report>maven-junit-report-plugin</report>
    <report>maven-jxr-plugin</report>
    <report>maven-license-plugin</report>
    <report>maven-tasklist-plugin</report>
  </reports>
  
</project>
