<?xml version="1.0" encoding="UTF-8"?>
<!--
   Copyright 2001-2004 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>
  <id>commons-beanutils</id>
  <name>BeanUtils</name>
  <currentVersion>1.7</currentVersion>
  <inceptionYear>2000</inceptionYear>
  <shortDescription>Commons BeanUtils</shortDescription>
  <description>BeanUtils provides an easy-to-use but flexible wrapper around reflection and introspection.</description>
  <logo>/images/logo.png</logo>
  
  <package>org.apache.commons.beanutils.*</package>
  <url>http://jakarta.apache.org/commons/beanutils/index.html</url>

  <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>jakarta.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:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-commons/${pom.artifactId.substring(8)}</connection>
    <url>http://cvs.apache.org/viewcvs/jakarta-commons/${pom.artifactId.substring(8)}/</url>
  </repository>
  
  <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://nagoya.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://nagoya.apache.org/eyebrowse/SummarizeList?listName=commons-user@jakarta.apache.org</archive>
    </mailingList>
  </mailingLists>
   
  <developers>
    <developer>
      <name>Robert Burrell Donkin</name>
      <id>rdonkin</id>
      <email>rdonkin@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>dIon Gillard</name>
      <id>dion</id>
      <email>dion@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Craig McClanahan</name>
      <id>craigmcc</id>
      <email>craigmcc@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Geir Magnusson Jr.</name>
      <id>geirm</id>
      <email>geirm@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Scott Sanders</name>
      <id>sanders</id>
      <email>sanders@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>James Strachan</name>
      <id>jstrachan</id>
      <email>jstrachan@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Rodney Waldhoff</name>
      <id>rwaldhoff</id>
      <email>rwaldhoff@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Martin van den Bemt</name>
      <id>mvdb</id>
      <email>mvdb@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Yoav Shapira</name>
      <id>yoavs</id>
      <email>yoavs@apache.org</email>
      <organization>Apache Software Foundation</organization>
    </developer>
  </developers>

  <contributors>
    <contributor>
      <name>Paul Jack</name>
      <email></email>
    </contributor>
    <contributor>
      <name>Stephen Colebourne</name>
      <email></email>
    </contributor>
    <contributor>
      <name>Berin Loritsch</name>
      <email></email>
    </contributor>    
  </contributors>
  
  <dependencies>
    <dependency>
      <id>commons-logging</id>
      <version>1.0.3</version>
    </dependency>
  </dependencies>

  <build>
    	<nagEmailAddress>commons-dev@jakarta.apache.org</nagEmailAddress>
    	<sourceDirectory>src/java</sourceDirectory>
    	<unitTestSourceDirectory>src/test</unitTestSourceDirectory>
    	<integrationUnitTestSourceDirectory/>
    	<aspectSourceDirectory/>

    	<!-- Unit test classes -->
    	<unitTest>
	      	<includes>
	        	<include>**/*TestCase.java</include>
            </includes>
            <resources>
                <resource>
                    <directory>${pom.build.unitTestSourceDirectory}</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
            </resources>
   		</unitTest>

    	<!-- Integration unit test classes -->
    	<integrationUnitTestPatterns></integrationUnitTestPatterns>
    
    	<resources>
      		<includes>
       			<include>**/*.properties</include>
      		</includes>
    	</resources>
    	<jars/>
  	</build>

  <reports>
  	<report>maven-changelog-plugin</report>
   	<report>maven-changes-plugin</report>
    <report>maven-developer-activity-plugin</report>
    <report>maven-file-activity-plugin</report>
    <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>
