<?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
    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">
  <parent>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-parent</artifactId>
    <version>52</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>commons-daemon</groupId>
  <artifactId>commons-daemon</artifactId>
  <version>1.2.3</version>
  <name>Apache Commons Daemon</name>
  <!-- Daemon started in Commons in 2002 with an import of code from Tomcat,
       which is why the NOTICE file has an earlier date than the inceptionYear -->
  <inceptionYear>2002</inceptionYear>
  <description>
    Apache Commons Daemon software is a set of utilities and Java support
    classes for running Java applications as server processes. These are
    commonly known as 'daemon' processes in Unix terminology (hence the
    name). On Windows they are called 'services'.
  </description>
  <url>https://commons.apache.org/proper/commons-daemon/</url>

  <issueManagement>
    <system>jira</system>
    <url>https://issues.apache.org/jira/browse/DAEMON</url>
  </issueManagement>

  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/commons-daemon.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-daemon.git</developerConnection>
    <url>https://gitbox.apache.org/repos/asf?p=commons-daemon.git</url>
  </scm>

  <developers>
    <developer>
      <name>Jean-Frederic Clere</name>
      <id>jfclere</id>
      <email>jfclere at apache.org</email>
    </developer>

    <developer>
      <name>Remy Maucherat</name>
      <id>remm</id>
      <email>remm at apache.org</email>
    </developer>

    <developer>
      <name>Yoav Shapira</name>
      <id>yoavs</id>
      <email>yoavs at apache.org</email>
    </developer>

    <developer>
      <name>Bill Barker</name>
      <id>billbarker</id>
      <email>billbarker at apache.org</email>
    </developer>
    <developer>
      <name>Mladen Turk</name>
      <id>mturk</id>
      <email>mturk at apache.org</email>
    </developer>

    <developer>
      <name>Pier Fumagalli</name>
      <id>pier</id>
      <email>pier at apache.org</email>
    </developer>
  </developers>

  <contributors>
    <contributor>
      <name>Nick Griffiths</name>
      <email>nicobrevin@gmail.com</email>
    </contributor>
  </contributors>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <properties>
    <!-- Apache Commons Daemon is used by Apache Tomcat. The oldest currently
         supported Tomcat version is Tomcat 7 which has a minimum Java version
         of Java 6. It is therefore advisable to check with the Apache Tomcat
         community before increasing these values. -->
    <animal-sniffer.signature>java16</animal-sniffer.signature>
    <commons.daemon.javaversion>1.6</commons.daemon.javaversion>
    <maven.compiler.source>${commons.daemon.javaversion}</maven.compiler.source>
    <maven.compiler.target>${commons.daemon.javaversion}</maven.compiler.target>
    <commons.componentid>daemon</commons.componentid>
    <commons.module.name>org.apache.commons.daemon</commons.module.name>
    <commons.release.version>1.2.3</commons.release.version>
    <commons.jira.id>DAEMON</commons.jira.id>
    <commons.jira.pid>12310468</commons.jira.pid>
  </properties>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <configuration>
            <excludes>
              <!-- Free Software (see header) -->
              <exclude>src/native/unix/configure</exclude>
              <!-- GPL with applicable exception that allows ALv2 -->
              <exclude>src/native/unix/support/config.guess</exclude>
              <exclude>src/native/unix/support/config.sub</exclude>
              <!-- Files created by Configure -->
              <!-- Excluded from Git but may be present locally -->
              <exclude>src/native/unix/config.nice</exclude>
              <exclude>src/native/unix/config.status</exclude>
              <exclude>src/native/unix/config.log</exclude>
            </excludes>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>src/assembly/native-src.xml</descriptor>
            <descriptor>src/assembly/bin.xml</descriptor>
            <descriptor>src/assembly/src.xml</descriptor>
            <descriptor>src/assembly/win.xml</descriptor>
          </descriptors>
          <tarLongFileMode>gnu</tarLongFileMode>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>jdk12-plus-no-java6</id>
      <activation>
        <jdk>[1.12,)</jdk>
      </activation>
      <properties>
        <commons.daemon.javaversion>1.7</commons.daemon.javaversion>
      </properties>
    </profile>
  </profiles>
</project>
