<!--
 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>log4j</groupId>
		<artifactId>apache-log4j-companions-parent</artifactId>
		<version>1.0-SNAPSHOT</version>
		<relativePath>.../apache-log4j-companions-parent</relativePath>
	</parent>
	<groupId>log4j</groupId>
	<artifactId>apache-log4j-zeroconf</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>Apache Zeroconf Companion for log4j 1.2.</name>
	<description>This companion provides an appender that uses Zeroconf to advertise its presence.</description>
	<url>http://logging.apache.org:80/log4j/companions/zeroconf</url>
	<issueManagement>
		<system>Bugzilla</system>
		<url>http://issues.apache.org/bugzilla/</url>
	</issueManagement>
	<ciManagement>
		<system>Gump</system>
		<url>http://vmgump.apache.org/gump/public/logging-log4j-zeroconf/logging-log4j-zeroconf/index.html</url>
	</ciManagement>
	<mailingLists>
		<mailingList>
			<name>log4j-user</name>
			<subscribe>log4j-user-subscribe@logging.apache.org</subscribe>
			<unsubscribe>log4j-user-unsubscribe@logging.apache.org</unsubscribe>
			<post>log4j-user@logging.apache.org</post>
			<archive>http://mail-archives.apache.org/mod_mbox/logging-log4j-user/</archive>
			<otherArchives>
				<otherArchive>http://marc.theaimsgroup.com/?l=log4j-user&amp;r=1&amp;w=2</otherArchive>
				<otherArchive>http://dir.gmane.org/gmane.comp.jakarta.log4j.user</otherArchive>
			</otherArchives>
		</mailingList>
		<mailingList>
			<name>log4j-dev</name>
			<subscribe>log4j-dev-subscribe@logging.apache.org</subscribe>
			<unsubscribe>log4j-dev-unsubscribe@logging.apache.org</unsubscribe>
			<post>log4j-dev@logging.apache.org</post>
			<archive>http://mail-archives.apache.org/mod_mbox/logging-log4j-dev/</archive>
			<otherArchives>
				<otherArchive>http://marc.theaimsgroup.com/?l=log4j-dev&amp;r=1&amp;w=2</otherArchive>
				<otherArchive>http://dir.gmane.org/gmane.comp.jakarta.log4j.devel</otherArchive>
			</otherArchives>
		</mailingList>
	</mailingLists>
	<licenses>
		<license>
			<name>Apache License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>
	<scm>
		<connection>scm:svn:http://svn.apache.org/repos/asf/logging/log4j/companions/zeroconf/trunk</connection>
		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/logging/log4j/companions/zeroconf/trunk</developerConnection>
		<url>http://svn.apache.org/viewcvs.cgi/logging/log4j/companions/zeroconf/trunk</url>
	</scm>
	<organization>
		<name>Apache Software Foundation</name>
		<url>http://www.apache.org</url>
	</organization>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.4</source>
					<target>1.4</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-site-plugin</artifactId>
				<version>3.0</version>
				<configuration>
					<templateFile>${basedir}/src/site/maven-site.vm</templateFile>
					<reportPlugins>
						<plugin>
							<artifactId>maven-project-info-reports-plugin</artifactId>
							<reportSets>
								<reportSet>
									<reports>
										<report>scm</report>
										<report>dependencies</report>
										<report>cim</report>
										<report>issue-tracking</report>
										<report>mailing-list</report>
										<report>license</report>
									</reports>
								</reportSet>
							</reportSets>
						</plugin>
						<plugin>
							<artifactId>maven-changes-plugin</artifactId>
							<reportSets>
								<reportSet>
									<reports>
										<report>changes-report</report>
									</reports>
								</reportSet>
							</reportSets>
							<configuration>
								<issueLinkTemplate>%URL%/show_bug.cgi?id=%ISSUE%</issueLinkTemplate>
							</configuration>
						</plugin>
						<plugin>
							<artifactId>maven-pmd-plugin</artifactId>
						</plugin>
						<plugin>
							<artifactId>maven-javadoc-plugin</artifactId>
						</plugin>
					</reportPlugins>
				</configuration>
				<!-- <executions> <execution> <phase>package</phase> <goals> <goal>site</goal> 
					</goals> </execution> </executions> -->
			</plugin>
			<plugin>
				<artifactId>maven-release-plugin</artifactId>
				<configuration>
					<goals>site-deploy</goals>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-antrun-plugin</artifactId>
				<executions>
					<execution>
						<phase>site</phase>
						<id>untag-site</id>
						<configuration>
							<tasks>
								<taskdef name="replaceregexp"
									classname="org.apache.tools.ant.taskdefs.optional.ReplaceRegExp" />
								<replaceregexp file="target/site/source-repository.html"
									match="/tags/[^ &quot;&apos;&lt;]*" replace="/trunk" flags="g" />
								<replaceregexp match="-- Generated by (.*) on .*--"
									replace="-- Generated by \1 --" flags="g">
									<fileset dir="target/site/apidocs" includes="**/*.html" />
								</replaceregexp>
							</tasks>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
					<execution>
						<phase>post-site</phase>
						<id>post-site</id>
						<configuration>
							<tasks>
								<ant target="post-site" />
							</tasks>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
					<execution>
						<phase>site-deploy</phase>
						<id>site-deploy</id>
						<configuration>
							<tasks>
								<ant target="site-deploy" />
							</tasks>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
				</executions>
				<dependencies>
					<dependency>
						<groupId>ant</groupId>
						<artifactId>ant-nodeps</artifactId>
						<version>1.6.5</version>
					</dependency>
					<dependency>
						<groupId>ant</groupId>
						<artifactId>ant</artifactId>
						<version>1.6.5</version>
					</dependency>
					<dependency>
						<groupId>ant-contrib</groupId>
						<artifactId>ant-contrib</artifactId>
						<version>1.0b2</version>
					</dependency>
				</dependencies>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>jmdns</groupId>
			<artifactId>jmdns</artifactId>
			<version>1.0</version>
		</dependency>
	</dependencies>
	<distributionManagement>
		<repository>
			<id>logging.repo</id>
			<url>scp://people.apache.org/www/people.apache.org/builds/logging/repo/</url>
		</repository>
		<site>
			<id>logging.site</id>
			<url>scp://localhost/${user.dir}/target/site-deploy</url>
		</site>
	</distributionManagement>
</project>
