<?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>11</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>  
  <name>Commons Exec</name>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-exec</artifactId>
  <version>1.0.1</version>
  <description>A library to reliably execute external processes from within the JVM</description>
  <url>http://commons.apache.org/exec/</url>  
  
  <issueManagement>
      <system>jira</system>
      <url>http://issues.apache.org/jira/browse/EXEC</url>
  </issueManagement>
    
  <dependencies>
   <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
  <developers>
    <developer>
      <id>brett</id>
      <name>Brett Porter</name>
      <email>brett AT apache DOT org</email>
      <organization>Apache</organization>
      <timezone>+10</timezone>
    </developer>
    <developer>
      <id>trygvis</id>
      <name>Trygve Laugstøl</name>
      <email>trygvis AT apache DOT org</email>
      <organization>Apache</organization>
      <timezone>+1</timezone>
    </developer>
    <developer>
      <id>sgoeschl</id>
      <name>Siegfried Goeschl</name>
      <email>sgoeschl AT apache DOT org</email>
      <organization>Apache</organization>
      <timezone>+1</timezone>
    </developer>
  </developers>
  
  <contributors>
    <contributor>
      <name>Niklas Gustavsson</name>
      <email>niklas AT protocol7 DOT com</email>
    </contributor>
    <contributor>
      <name>Benjamin Bentmann</name>
      <email>benjamin dot bentmann at udo dot edu</email>
    </contributor>
  </contributors>
  
  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/exec/tags/EXEC_1_0_1_RC4</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/proper/exec/tags/EXEC_1_0_1_RC4</developerConnection>
    <url>http://svn.apache.org/viewvc/commons/proper/exec/tags/EXEC_1_0_1_RC4</url>
  </scm>
  
  <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/assembly/bin.xml</descriptor>
            <descriptor>src/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>
    </plugins>
  </build>
    
  <distributionManagement>
    <site>
      <id>website</id>
      <name>Apache Website</name>
      <url>${commons.deployment.protocol}://people.apache.org/www/commons.apache.org/exec/</url>
    </site>
  </distributionManagement>

  <reporting>
    <plugins>
      <!-- generate the changes report from changes.xml -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changes-plugin</artifactId>
        <version>2.0</version>
        <configuration>
          <issueLinkTemplate>%URL%/%ISSUE%</issueLinkTemplate>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>changes-report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>1.2</version>
        <configuration>
          <threshold>Normal</threshold>
          <effort>Default</effort>
          <excludeFilterFile>${basedir}/findbugs-exclude-filter.xml</excludeFilterFile>
       </configuration>
      </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.0</version>
          </plugin>
        </plugins>
      </reporting>
    </profile>
    <profile>
      <id>rc</id>
      <distributionManagement>
        <!-- Cannot define in parent ATM, see COMMONSSITE-26 -->
        <site>
          <id>apache.website</id>
          <name>Apache Commons Release Candidate Staging Site</name>
          <url>${commons.deployment.protocol}://people.apache.org/www/people.apache.org/builds/commons/${commons.componentid}/${commons.release.version}/${commons.rc.version}/site</url>
        </site>
      </distributionManagement>
    </profile>
  </profiles>

  <properties>
    <!-- Compiler source and target JVM (see parent pom) -->
    <maven.compile.source>1.3</maven.compile.source>
    <maven.compile.target>1.3</maven.compile.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.0.1</commons.release.version>
    <!-- The RC version used in the staging repository URL. -->
    <commons.rc.version>RC4</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>
  </properties>

</project>
