<!--
 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>
  <groupId>log4net</groupId>
  <artifactId>apache-log4net</artifactId>
  <packaging>pom</packaging>
  <version>1.2.14</version>
  <name>Apache log4net</name>
  <description>Logging framework for Microsoft .NET Framework.</description>
  <url>http://logging.apache.org/log4net/</url>
  <inceptionYear>2004</inceptionYear>
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/LOG4NET</url>
  </issueManagement>
  <ciManagement>
    <system>Jenkins</system>
    <url>https://builds.apache.org/job/log4net-trunk-build/</url>
  </ciManagement>
  <mailingLists>
    <mailingList>
      <name>log4net-user : log4net usage</name>
      <subscribe>log4net-user-subscribe@logging.apache.org</subscribe>
      <unsubscribe>log4net-user-unsubscribe@logging.apache.org</unsubscribe>
      <post>log4net-user@logging.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/logging-log4net-user/</archive>
      <otherArchives>
        <otherArchive>http://marc.info/?l=log4net-user</otherArchive>
        <otherArchive>http://dir.gmane.org/gmane.comp.log.log4net.user</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>log4net-dev : log4net development</name>
      <subscribe>log4net-dev-subscribe@logging.apache.org</subscribe>
      <unsubscribe>log4net-dev-unsubscribe@logging.apache.org</unsubscribe>
      <post>log4net-dev@logging.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/logging-log4net-dev/</archive>
      <otherArchives>
        <otherArchive>http://marc.info/?l=log4net-dev</otherArchive>
        <otherArchive>http://dir.gmane.org/gmane.comp.apache.logging.log4net.devel</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>logging commits : all svn commits of the logging projects including log4net</name>
      <subscribe>commits-subscribe@logging.apache.org</subscribe>
      <unsubscribe>commits-unsubscribe@logging.apache.org</unsubscribe>
      <post>Read-Only List</post>
      <archive>http://mail-archives.apache.org/mod_mbox/logging-commits/</archive>
    </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/log4net/trunk</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/logging/log4net/trunk</developerConnection>
    <url>http://svn.apache.org/viewvc/logging/log4net/trunk</url>
  </scm>
  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org</url>
  </organization>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <version>0.11</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.4</version>
        <configuration>

          <!-- Override default rendering (only required to add a custom footer) -->
          <!-- This can be removed once <footer> tag is supported in site.xml.  -->
          <templateFile>${basedir}/src/site/site.vm</templateFile>
          <!-- Configure additional reports on the site -->
          <reportPlugins>
            <!-- Project info report -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-project-info-reports-plugin</artifactId>
              <version>2.8</version>
              <reportSets>
                <reportSet>
                  <reports>
                    <report>cim</report>	
                    <report>scm</report>
                    <report>dependencies</report>
                    <report>license</report>
                    <report>project-team</report>
                    <report>issue-tracking</report>
                    <report>mailing-list</report>
                  </reports>
                </reportSet>
              </reportSets>
            </plugin>
						
          </reportPlugins>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.8</version>
        <executions>
          <execution>
            <phase>install</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                <fixcrlf srcDir="target/site" excludes="images/**"/>
              </tasks>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.9.4</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <plugins>
      <!-- RAT report -->
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <version>0.11</version>
        <configuration>
          <excludes>
            <!-- generated files -->
            <exclude>**/*.suo</exclude>
            <exclude>**/*.user</exclude>
            <exclude>**/obj/**</exclude>
            <exclude>bin/**</exclude>
            <exclude>build/**</exclude>
            <exclude>doc/sdk/**</exclude>
            <exclude>src/log4net.xml</exclude>
            <exclude>src/GeneratedAssemblyInfo.cs</exclude>
            <exclude>tests/bin/**</exclude>

            <!-- really README files -->
            <exclude>*.snk*</exclude>
            <exclude>tests/lib/prerequisites.txt</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

  <developers>
    <developer>
      <name>Curt Arnold</name>
      <id>carnold</id>
    </developer>
    <developer>
      <name>Stefan Bodewig</name>
      <id>bodewig</id>
    </developer>
    <developer>
      <name>Nicko Cadell</name>
      <id>nicko</id>
    </developer>
    <developer>
      <name>Niall Daley</name>
      <id>niall</id>
    </developer>
    <developer>
      <name>Gert Driesen</name>
      <id>drieseng</id>
    </developer>
    <developer>
      <name>Ron Grabowski</name>
      <id>rgrabowski</id>
    </developer>
    <developer>
      <name>Dominik Psenner</name>
      <id>dpsenner</id>
    </developer>
  </developers>

  <contributors>
    <contributor>
      <name>Julian Biddle</name>
    </contributor>
    <contributor>
      <name>Daniel Cazzulino</name>
    </contributor>
    <contributor>
      <name>Aspi Havewala</name>
    </contributor>
    <contributor>
      <name>Rick Hobbs</name>
    </contributor>
    <contributor>
      <name>Lance Nehring</name>
    </contributor>
    <contributor>
      <name>Angelika Schnagl</name>
    </contributor>
    <contributor>
      <name>Edward Smit</name>
    </contributor>
    <contributor>
      <name>Douglas de la Torre</name>
    </contributor>
    <contributor>
      <name>Pavlos Touboulidis</name>
    </contributor>
    <contributor>
      <name>Thomas Voss</name>
    </contributor>
    <contributor>
      <name>Jarrod Alexander</name>
    </contributor>
  </contributors>

  <dependencies>
  </dependencies>

  <distributionManagement>
    <site>
      <id>logging.site</id>
      <url>file:///${user.dir}/target/site-deploy</url>
    </site>
  </distributionManagement> 
</project>
