<?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.5-SNAPSHOT</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>4.13.2</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.5</commons.release.version>
    <commons.rc.version>RC1</commons.rc.version>
    <commons.bc.version>1.2.4</commons.bc.version>
    <commons.jira.id>DAEMON</commons.jira.id>
    <commons.jira.pid>12310468</commons.jira.pid>
    <commons.jacoco.version>0.8.7</commons.jacoco.version>
    <commons.japicmp.version>0.15.3</commons.japicmp.version>
  </properties>

  <build>
  <defaultGoal>clean package apache-rat:check japicmp:cmp javadoc:javadoc</defaultGoal>
    <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>
      <!-- Force detach-distributions to execute *after* Nexus deploy -->
      <!-- we want these distributions deployed to both Nexus and dist.a.o -->
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-release-plugin</artifactId>
        <executions>
          <execution>
            <id>detatch-distributions</id>
            <phase>deploy</phase>
            <goals>
              <goal>detach-distributions</goal>
            </goals>
          </execution>
        </executions>
      </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>
