<?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>35</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <name>Apache Commons Exec</name>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-exec</artifactId>
    <version>1.3</version>
    <description>Apache Commons Exec is a library to reliably execute external processes from within the JVM.</description>
    <prerequisites>
      <maven>2.2.1</maven>
    </prerequisites>  
    <url>http://commons.apache.org/proper/commons-exec/</url>
    <issueManagement>
        <system>jira</system>
        <url>http://issues.apache.org/jira/browse/EXEC</url>
    </issueManagement>
    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/exec/trunk</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/proper/exec/trunk</developerConnection>
        <url>http://svn.apache.org/viewvc/commons/proper/exec/trunk</url>
    </scm>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <!-- Must agree with the version in build.xml -->
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <developers>
        <developer>
            <id>brett</id>
            <name>Brett Porter</name>
            <organization>Apache</organization>
            <timezone>+10</timezone>
        </developer>
        <developer>
            <id>trygvis</id>
            <name>Trygve Laugstøl</name>
            <organization>Apache</organization>
            <timezone>+1</timezone>
        </developer>
        <developer>
            <id>sgoeschl</id>
            <name>Siegfried Goeschl</name>
            <organization>Apache</organization>
            <timezone>+1</timezone>
        </developer>
        <developer>
            <id>sebb</id>
            <name>Sebastian Bazley</name>
            <organization>Apache</organization>
            <timezone>+1</timezone>
        </developer>
        <developer>
            <name>Gary Gregory</name>
            <id>ggregory</id>
            <organization>Apache</organization>
            <email>ggregory@apache.org</email>
            <url>http://www.garygregory.com</url>
            <timezone>-5</timezone>
        </developer>        
    </developers>
    <contributors>
        <contributor>
            <name>Niklas Gustavsson</name>
        </contributor>
        <contributor>
            <name>Benjamin Bentmann</name>
        </contributor>
        <contributor>
            <name>Marco Ferrante</name>
        </contributor>
        <contributor>
            <name>Jerome Lacoste</name>
        </contributor>
        <contributor>
            <name>Milos Kleint</name>
        </contributor>
        <contributor>
            <name>Pablo Hoertner</name>
        </contributor>
        <contributor>
            <name>Niall Pemberton</name>
        </contributor>
    </contributors>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>**/TestUtil.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/bin.xml</descriptor>
                        <descriptor>src/main/assembly/src.xml</descriptor>
                    </descriptors>
                    <tarLongFileMode>gnu</tarLongFileMode>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <mavenExecutorId>forked-path</mavenExecutorId>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <distributionManagement>
        <site>
            <id>stagingSite</id>
            <name>Apache Staging Website</name>
            <url>${commons.deployment.protocol}://people.apache.org/www/commons.apache.org/${commons.componentid}/</url>
        </site>
    </distributionManagement>
    <reporting>
        <plugins>
           <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-pmd-plugin</artifactId>
              <version>3.2</version>
              <configuration>
                <targetJdk>${maven.compiler.target}</targetJdk>
                <linkXref>true</linkXref>
                <rulesets>
                  <ruleset>${basedir}/pmd.xml</ruleset>
                </rulesets>
              </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>2.5.5</version>
                <configuration>
                    <threshold>Normal</threshold>
                    <effort>Default</effort>
                    <excludeFilterFile>${basedir}/findbugs-exclude-filter.xml</excludeFilterFile>
                </configuration>
            </plugin>
          <plugin>
            <groupId>org.codehaus.sonar-plugins</groupId>
            <artifactId>maven-report</artifactId>
            <version>0.1</version>
          </plugin>
        </plugins>
    </reporting>
    <profiles>
        <!--
          enable this profile if you like to create cobertura report not being part of the official website
        -->
        <profile>
            <id>coverage</id>
            <reporting>
                <plugins>
                    <!-- Avoid broken Cobertura 2.1 plugin -->
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>cobertura-maven-plugin</artifactId>
                        <version>2.6</version>
                    </plugin>
                </plugins>
            </reporting>
        </profile>
      <profile>
        <id>setup-checkout</id>
        <activation>
          <file>
            <missing>site-content</missing>
          </file>
        </activation>
        <build>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-antrun-plugin</artifactId>
              <version>1.7</version>
              <executions>
                <execution>
                  <id>prepare-checkout</id>
                  <phase>pre-site</phase>
                  <goals>
                    <goal>run</goal>
                  </goals>
                  <configuration>
                    <tasks>
                      <exec executable="svn">
                        <arg line="checkout ${commons.scmPubUrl} ${commons.scmPubCheckoutDirectory}" />
                      </exec>
                      <!-- in case of paths to ignore (added manually) -->

                      <exec executable="svn">
                        <arg line="update --set-depth exclude ${commons.scmPubCheckoutDirectory}/javadocs" />
                      </exec>

                      <pathconvert pathsep=" " property="dirs">
                        <dirset dir="${commons.scmPubCheckoutDirectory}" includes="*" />
                      </pathconvert>
                      <exec executable="svn">
                        <arg line="update --set-depth infinity ${dirs}" />
                      </exec>

                      <exec executable="svn">
                        <arg line="update" />
                      </exec>
                    </tasks>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </build>
      </profile>
    </profiles>
    <properties>
        <!-- Compiler source and target JVM (see parent pom). Must agree with versions in build.xml -->
        <maven.compiler.source>1.5</maven.compiler.source>
        <maven.compiler.target>1.5</maven.compiler.target>
        <test>*Test</test>
        <commons.componentid>exec</commons.componentid>
        <commons.jira.id>EXEC</commons.jira.id>
        <commons.jira.pid>12310814</commons.jira.pid>
        <commons.release.version>1.3</commons.release.version>
        <!-- The RC version used in the staging repository URL. -->
        <commons.rc.version>RC1</commons.rc.version>
        <!-- Tell M2 not to use platform specific encodings for copying resources -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <commons.scmPubCheckoutDirectory>site-content</commons.scmPubCheckoutDirectory>
    </properties>
</project>
