<?xml version="1.0"?>
<!--
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>
	<pomVersion>3</pomVersion>

	<name>Commons Net</name>
	<groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
	<currentVersion>1.5.0-SNAPSHOT</currentVersion>
	<inceptionYear>1997</inceptionYear>
	<shortDescription>Commons Net</shortDescription>
	<description/>

	<logo>/images/net-logo-white.png</logo>

	<url>http://commons.apache.org/${pom.artifactId.substring(8)}/</url>
	<package>org.apache.commons.${pom.artifactId.substring(8)}</package>

	<organization>
		<name>The Apache Software Foundation</name>
          <url>http://commons.apache.org/</url>
          <logo>http://commons.apache.org/images/logo.png</logo>
	</organization>

	<licenses>
		<license>
			<name>The Apache Software License, Version 2.0</name>
			<url>/LICENSE.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>

	<gumpRepositoryId>commons</gumpRepositoryId>
	<issueTrackingUrl>http://issues.apache.org/jira/</issueTrackingUrl>
	<siteAddress>commons.apache.org</siteAddress>
	<siteDirectory>/www/commons.apache.org/${pom.artifactId.substring(8)}/</siteDirectory>
	<distributionDirectory>/www/people.apache.org/builds/commons/${pom.artifactId.substring(8)}/</distributionDirectory>

	<repository>
		<connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/${pom.artifactId.substring(8)}/trunk</connection>
		<url>http://svn.apache.org/repos/asf/commons/proper/${pom.artifactId.substring(8)}/trunk</url>
	</repository>

	<mailingLists>
		<mailingList>
            <name>Commons Dev List</name>
            <subscribe>dev-subscribe@commons.apache.org</subscribe>
            <unsubscribe>dev-unsubscribe@commons.apache.org</unsubscribe>
            <archive>http://mail-archives.apache.org/mod_mbox/commons-dev/</archive>
		</mailingList>
		<mailingList>
            <name>Commons User List</name>
            <subscribe>user-subscribe@commons.apache.org</subscribe>
            <unsubscribe>user-unsubscribe@commons.apache.org</unsubscribe>
            <archive>http://mail-archives.apache.org/mod_mbox/commons-user/</archive>
		</mailingList>
	</mailingLists>

	<versions>
		<version>
			<id>1.0.0</id>
			<name>1.0.0</name>
			<tag>NET_1_0_0</tag>
		</version>
		<version>
			<id>1.1.0</id>
			<name>1.1.0</name>
			<tag>NET_1_1_0</tag>
		</version>
		<version>
			<id>1.2.0</id>
			<name>1.2.0</name>
			<tag>NET_1_2_0</tag>
		</version>
		<version>
			<id>1.2.1</id>
			<name>1.2.1</name>
			<tag>NET_1_2_1</tag>
		</version>
		<version>
			<id>1.2.2</id>
			<name>1.2.2</name>
			<tag>NET_1_2_2</tag>
		</version>
		<version>
			<id>1.3.0</id>
			<name>1.3.0</name>
			<tag>NET_1_3_0</tag>
		</version>
		<version>
			<id>1.4.0</id>
			<name>1.4.0</name>
			<tag>NET_1_4_0</tag>
		</version>	
	</versions>

	<developers>
		<developer>
			<name>Jeffrey D. Brekke</name>
			<id>brekke</id>
			<email>Jeff.Brekke@qg.com</email>
			<organization>Quad/Graphics, Inc.</organization>
		</developer>
		<developer>
			<name>Steve Cohen</name>
			<id>scohen</id>
			<email>scohen@apache.org</email>
			<organization>javactivity.org</organization>
		</developer>
		<developer>
			<name>Bruno D'Avanzo</name>
			<id>brudav</id>
			<email>bruno.davanzo@hp.com</email>
			<organization>Hewlett-Packard</organization>
		</developer>
		<developer>
			<name>Daniel F. Savarese</name>
			<id>dfs</id>
			<email>dfs -> apache.org</email>
			<organization>
			&lt;a href="http://www.savarese.com/"&gt;Savarese Software Research&lt;/a&gt;
			</organization>
		</developer>
		<developer>
			<name>Rory Winston</name>
			<id>rwinston</id>
			<email>rwinston@apache.org</email>
			<organization></organization>
		</developer>
	</developers>

	<contributors>
		<contributor>
			<name>Rob Hasselbaum</name>
			<email>rhasselbaum -> alumni.ithaca.edu</email>
		</contributor>
		<contributor>
			<name>Mario Ivankovits</name>
			<email>mario@ops.co.at</email>
		</contributor>
		<contributor>
			<name>Tapan Karecha</name>
			<email>tapan@india.hp.com</email>
		</contributor>
		<contributor>
			<name>Winston Ojeda</name>
			<email>Winston.Ojeda@qg.com</email>
			<organization>Quad/Graphics, Inc.</organization>
		</contributor>
		<contributor>
			<name>Ted Wise</name>
			<email>ctwise@bellsouth.net</email>
		</contributor>
	</contributors>

	<dependencies>
	  <dependency>
        <groupId>oro</groupId>
        <artifactId>oro</artifactId>
	    <version>2.0.8</version>
      </dependency>

      <dependency>
        <groupId>maven</groupId>
        <artifactId>maven-xdoc-plugin</artifactId>
        <version>1.9.2</version>
        <url>http://maven.apache.org/reference/plugins/xdoc/</url>
        <type>plugin</type>
        <properties>
          <comment>
              &lt;strong&gt;Site Only&lt;/strong&gt; - v1.9.2 (minimum)
              required for building the Site documentation.
          </comment>
        </properties>
      </dependency>

	</dependencies>

	<build>

            <nagEmailAddress>dev@commons.apache.org</nagEmailAddress>

		<sourceDirectory>src/java</sourceDirectory>

		<resources>
			<resource>
				<directory>${basedir}</directory>
				<targetPath>META-INF</targetPath>
				<includes>
					<include>NOTICE.txt</include>
				</includes>
			</resource>
		</resources>

		<unitTestSourceDirectory>src/test</unitTestSourceDirectory>

		<unitTest>
			<includes>
				<include>**/*Test.java</include>
			</includes>
			<excludes>
				<exclude>**/*FunctionalTest.java</exclude>
				<exclude>**/*POP3*.java</exclude>
			</excludes>
		</unitTest>

		<resources>
			<resource>
				<directory>${basedir}</directory>
				<targetPath>META-INF</targetPath>
				<includes>
					<include>NOTICE.txt</include>
				</includes>
			</resource>
		</resources>

	</build>

	<reports>
		<report>maven-changes-plugin</report>
		<report>maven-tasklist-plugin</report>
		<report>maven-junit-report-plugin</report>
		<report>maven-jdepend-plugin</report>
		<report>maven-jcoverage-plugin</report>
		<report>maven-simian-plugin</report>
		<report>maven-javadoc-plugin</report>
		<report>maven-jxr-plugin</report>
		<report>maven-license-plugin</report>
	</reports>

</project>
