<?xml version="1.0" encoding="UTF-8"?>

<!--
   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>48</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>commons-vfs2-project</artifactId>
  <name>Apache Commons VFS Project</name>
  <description>Apache Commons VFS is a Virtual File System library.</description>
  <packaging>pom</packaging>
  <version>2.4.1</version>

  <url>http://commons.apache.org/proper/commons-vfs/</url>
  <inceptionYear>2002</inceptionYear>

  <modules>
    <module>commons-vfs2</module>
    <module>commons-vfs2-examples</module>
    <module>commons-vfs2-distribution</module>
  </modules>
  <!-- commons-vfs2-sandbox is in profile include-sandbox -->

  <issueManagement>
    <system>jira</system>
    <url>https://issues.apache.org/jira/browse/VFS</url>
  </issueManagement>

  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/commons-vfs.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-vfs.git</developerConnection>
    <url>https://gitbox.apache.org/repos/asf?p=commons-vfs.git</url>
    <tag>commons-vfs-project-2.4</tag>
  </scm>

  <developers>
    <developer>
      <name>Adam Murdoch</name>
      <id>adammurdoch</id>
      <email>adammurdoch -at- apache.org</email>
      <organization />
    </developer>
    <developer>
      <name>James Strachan</name>
      <id>jstrachan</id>
      <email>jstrachan -at- apache.org</email>
      <organization>SpiritSoft, Inc.</organization>
    </developer>
    <developer>
      <name>Mario Ivankovits</name>
      <id>imario</id>
      <email>imario -at- apache.org</email>
      <organization>OPS EDV Gmbh</organization>
    </developer>
    <developer>
      <name>Rahul Akolkar</name>
      <id>rahul</id>
      <email>rahul -at- apache.org</email>
      <organization>The Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>James Carman</name>
      <id>jcarman</id>
      <email>jcarman -at- apache.org</email>
      <organization>The Apache Software Foundation</organization>
    </developer>
    <developer>
      <name>Ralph Goers</name>
      <id>rgoers</id>
      <email>rgoers -at- apache.org</email>
      <organization>Intuit</organization>
    </developer>
    <developer>
      <name>Joerg Schaible</name>
      <id>joehni</id>
      <email>joehni -at- apache.org</email>
    </developer>
    <developer>
      <name>Gary D. Gregory</name>
      <id>ggregory</id>
      <email>ggregory -at- apache.org</email>
      <url>http://www.garygregory.com</url>
      <timezone>-5</timezone>
    </developer>
    <developer>
      <name>Bernd Eckenfels</name>
      <id>ecki</id>
      <email>ecki -at- apache.org</email>
      <url>http://bernd.eckenfels.net</url>
      <timezone>+1</timezone>
    </developer>
  </developers>

  <contributors>
    <contributor>
      <name>Rami Ojares</name>
      <email>rami.ojares -at- elisa.fi</email>
    </contributor>
    <contributor>
      <name>Anthony Goubard</name>
      <email>adagoubard -at- chello.nl</email>
    </contributor>
    <contributor>
      <name>Christopher Ottley</name>
      <email>xknight -at- users.sourceforge.net</email>
    </contributor>
    <contributor>
      <name>Dave Marion</name>
      <email>dlmarion -at- apache.org</email>
    </contributor>
    <contributor>
      <name>Scott Bjerstedt</name>
      <email>jcottbjer -at- gmail.com</email>
    </contributor>
    <contributor>
      <name>Jose Juan Montiel</name>
      <email>josejuan.montiel -at- gmail.com</email>
    </contributor>
    <contributor>
      <name>Otto Fowler</name>
      <email>otto -at- apache.org</email>
    </contributor>
  </contributors>

  <properties>
    <commons.encoding>UTF-8</commons.encoding>

    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>

    <!-- bare ID without major version or commons- prefix -->
    <commons.componentid>vfs</commons.componentid>
    <commons.packageId>vfs2</commons.packageId>
    <commons.module.name>org.apache.commons.vfs2</commons.module.name>
    <commons.jira.id>VFS</commons.jira.id>
    <commons.jira.pid>12310495</commons.jira.pid>
    <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-vfs</commons.scmPubUrl>
    <commons.siteOutputDirectory>${basedir}/../target/site</commons.siteOutputDirectory>
    <commons.releaseNotesLocation>${basedir}/../RELEASE-NOTES.txt</commons.releaseNotesLocation>
    <commons.distSvnStagingUrl>scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid}</commons.distSvnStagingUrl>
    <commons.release.version>2.4.1</commons.release.version>
    <!-- Commons Release Plugin -->
    <commons.bc.version>2.4</commons.bc.version>
    <commons.releaseManagerName>Gary Gregory</commons.releaseManagerName>    
    <commons.releaseManagerKey>86fdc7e2a11262cb</commons.releaseManagerKey>  
    <commons.rc.version>RC1</commons.rc.version>
    <commons.release.name>commons-vfs-${commons.release.version}</commons.release.name>
    <commons.release.desc>(requires Java 8)</commons.release.desc>

<!--
    <commons.release.2.version>2.0</commons.release.2.version>
    <commons.release.2.name>commons-vfs-2.0</commons.release.2.name>
    <commons.release.2.desc>(requires Java 1.5+)</commons.release.2.desc>
-->

    <vfs.parent.dir>${basedir}</vfs.parent.dir>
    <version.checkstyle>3.0.0</version.checkstyle>
    <!-- make sure bundle plugin has dependency informations for 'optional' -->
    <commons.osgi.excludeDependencies />
    <commons.osgi.import>
        org.apache.hadoop.*;resolution:=optional,
        org.apache.jackrabbit.*;resolution:=optional,
        org.apache.tools.ant.*;resolution:=optional,
        org.apache.commons.httpclient.*;resolution:=optional,
        *
    </commons.osgi.import>
    <!-- Newer versions of clirr throw an NPE building the site -->
    <commons.clirr.version>2.6</commons.clirr.version>
    <!-- Avoid warnings about being unable to find jars during site building -->
    <dependency.locations.enabled>false</dependency.locations.enabled>
    <hadoop.version>2.6.0</hadoop.version>
    <commons.surefire.version>2.19.1</commons.surefire.version>
    <commons.japicmp.version>0.14.1</commons.japicmp.version>
  </properties>

  <build>
    <resources>
      <resource>
        <directory>${basedir}/osgi</directory>
        <targetPath>osgi</targetPath>
        <includes>
          <include>MANIFEST.MF</include>
        </includes>
      </resource>
    </resources>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>vfs-jar-manifest</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <mkdir dir="${project.build.directory}/osgi" />
                <touch file="${project.build.directory}/osgi/MANIFEST.MF" />
              </target>
            </configuration>
          </execution>
          <execution>
            <id>javadoc.resources</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <copy todir="${project.build.directory}/apidocs/META-INF">
                  <fileset dir="${vfs.parent.dir}">
                    <include name="LICENSE.txt" />
                    <include name="NOTICE.txt" />
                  </fileset>
                </copy>
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <!-- to increase memory for tests on Travis CI -->
            <argLine>-Xmx64m</argLine>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${version.checkstyle}</version>
        <dependencies>
          <dependency>
            <groupId>com.puppycrawl.tools</groupId>
            <artifactId>checkstyle</artifactId>
            <version>8.23</version>
          </dependency>
        </dependencies>        
        <!-- Keep build/reporting in sync -->
        <configuration>
          <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->
          <configLocation>${vfs.parent.dir}/checkstyle.xml</configLocation>
          <suppressionsLocation>${vfs.parent.dir}/checkstyle-suppressions.xml</suppressionsLocation>
          <enableRulesSummary>false</enableRulesSummary>
          <propertyExpansion>basedir=${basedir}</propertyExpansion>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <!-- Should agree with config in reporting section -->
        <configuration>
          <excludes combine.children="append">
            <!--  trivial test data text files -->
            <exclude>src/test/resources/test-data/**/*.bin</exclude>
            <exclude>src/test/resources/test-data/**/*.txt</exclude>
            <exclude>src/test/resources/test-data/**/*.tgz</exclude>
            <exclude>src/test/resources/test-data/**/*.tbz2</exclude>
            <exclude>src/test/resources/test-data/test.mf</exclude>
            <!--  implicite exclude does not work if sandbox profile is not activated -->
            <exclude>commons-vfs2-sandbox/**</exclude>
            <exclude>dist/target/**</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.github.siom79.japicmp</groupId>
        <artifactId>japicmp-maven-plugin</artifactId>
        <configuration>
          <parameter>
            <overrideCompatibilityChangeParameters>
              <overrideCompatibilityChangeParameter>
                <compatibilityChange>METHOD_NEW_DEFAULT</compatibilityChange>
                <binaryCompatible>true</binaryCompatible>
                <sourceCompatible>true</sourceCompatible>
                <semanticVersionLevel>PATCH</semanticVersionLevel>
              </overrideCompatibilityChangeParameter>
            </overrideCompatibilityChangeParameters>
          </parameter>
        </configuration>
      </plugin>    
    </plugins>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <version>${commons.rat.version}</version>
        <!-- Should agree with config in build section -->
        <configuration>
          <excludes combine.children="append">
            <!--  trivial test data text files -->
            <exclude>src/test/resources/test-data/**/*.txt</exclude>
            <exclude>src/test/resources/test-data/**/*.tgz</exclude>
            <exclude>src/test/resources/test-data/**/*.tbz2</exclude>
            <exclude>src/test/resources/test-data/test.mf</exclude>
            <!--  implicit exclude does not work if sandbox profile is not activated -->
            <exclude>commons-vfs2-sandbox/**</exclude>
            <exclude>dist/target/**</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${version.checkstyle}</version>
        <!-- Keep build/reporting in sync -->
        <configuration>
          <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->
          <configLocation>${vfs.parent.dir}/checkstyle.xml</configLocation>
          <suppressionsLocation>${vfs.parent.dir}/checkstyle-suppressions.xml</suppressionsLocation>
          <enableRulesSummary>false</enableRulesSummary>
          <propertyExpansion>basedir=${basedir}</propertyExpansion>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${commons.javadoc.version}</version>
        <configuration>
          <tags>
            <tag>
              <name>todo</name>
              <!-- todo tag for all places -->
              <placement>a</placement>
              <head>To Do:</head>
            </tag>
          </tags>
          <aggregate>true</aggregate>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <!-- commons-parent defines version 2.5.x or 3.x depending on JDK active. -->
        <version>${commons.findbugs.version}</version>
        <configuration>
          <threshold>Normal</threshold>
          <effort>Default</effort>
          <excludeFilterFile>${vfs.parent.dir}/findbugs-exclude-filter.xml</excludeFilterFile>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.12.0</version>
        <configuration>
          <targetJdk>${maven.compiler.target}</targetJdk>
          <aggregate>true</aggregate>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.github.siom79.japicmp</groupId>
        <artifactId>japicmp-maven-plugin</artifactId>
        <configuration>
          <parameter>
            <overrideCompatibilityChangeParameters>
              <overrideCompatibilityChangeParameter>
                <compatibilityChange>METHOD_NEW_DEFAULT</compatibilityChange>
                <binaryCompatible>true</binaryCompatible>
                <sourceCompatible>true</sourceCompatible>
                <semanticVersionLevel>PATCH</semanticVersionLevel>
              </overrideCompatibilityChangeParameter>
            </overrideCompatibilityChangeParameters>
          </parameter>
        </configuration>
      </plugin>      
      <!-- cobertura breaks because it cannot parse annotations in methods. -->
      <!--
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>${commons.cobertura.version}</version>
      </plugin>
      -->
      <!-- javancss breaks because it cannot parse annotations in methods. -->
      <!--
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>javancss-maven-plugin</artifactId>
        <version>2.0</version>
      </plugin>
      -->
    </plugins>
  </reporting>

  <dependencyManagement>
    <dependencies>
      <!-- artifacts of project, versions managed by release-plugin -->
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-vfs2</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-vfs2</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-vfs2-sandbox</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-vfs2-examples</artifactId>
        <version>${project.version}</version>
      </dependency>

      <!-- 3rd party dependencies -->
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
      </dependency>
      <dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>3.6</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.4</version>
      </dependency>
      <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <version>3.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.9</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.18</version>
      </dependency>
      <dependency>
        <groupId>org.apache.jackrabbit</groupId>
        <artifactId>jackrabbit-webdav</artifactId>
        <version>1.6.5</version>
      </dependency>
      <dependency>
        <groupId>ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.6.5</version>
      </dependency>
      <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.55</version>
      </dependency>
      <dependency>
        <groupId>jcifs</groupId>
        <artifactId>jcifs</artifactId>
        <version>1.3.17</version>
      </dependency>
      <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>${hadoop.version}</version>
        <exclusions>
          <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>${hadoop.version}</version>
        <exclusions>
          <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!-- Testing -->
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.0.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.9</version>
      </dependency>
      <!-- Test FTP with Apache FTP Server (MINA) -->
      <dependency>
        <groupId>org.apache.ftpserver</groupId>
        <artifactId>ftpserver-core</artifactId>
        <version>1.1.1</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.5.11</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.5.11</version>
      </dependency>
      <!-- Test SFTP with Apache SSHd Server (MINA) -->
      <dependency>
        <groupId>org.apache.sshd</groupId>
        <artifactId>sshd-core</artifactId>
        <version>0.8.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.mina</groupId>
        <artifactId>mina-core</artifactId>
        <version>2.0.20</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk16</artifactId>
        <version>1.46</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
      </dependency>
      <!-- Test HTTP with Apache HttpComponent Core -->
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore-nio</artifactId>
        <version>4.4.11</version>
      </dependency>
      <!-- Test WebDAV with Apache Jackrabbit -->
      <dependency>
        <groupId>org.apache.jackrabbit</groupId>
        <artifactId>jackrabbit-standalone</artifactId>
        <version>1.6.5</version>
        <exclusions>
          <exclusion>
            <!-- provides everything inlined. -->
            <groupId>*</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- HDFS test dependencies -->
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>${hadoop.version}</version>
        <type>test-jar</type>
        <exclusions>
          <exclusion>
            <!-- jackrabbit-standalone provides one, too -->
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>${hadoop.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>jsr311-api</artifactId>
        <version>1.1.1</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <distributionManagement>
    <site>
      <id>commons.site</id>
      <name>Apache Commons Site</name>
      <url>scm:svn:${commons.scmPubUrl}</url>
    </site>
  </distributionManagement>

  <!-- Releasing VFS as a multi-module build with binary artifacts is somewhat painful. This profile hooks into the commons-parent
    and the apache-pom to get the build done and then uses the assembly to package it up. -->
  <profiles>
    <profile>
      <id>include-sandbox</id>
      <modules>
        <module>commons-vfs2-sandbox</module>
      </modules>
    </profile>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
              <!-- Don't build the archives here. They are constructed in the dist project -->
              <execution>
                <configuration>
                  <skipAssembly>true</skipAssembly>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

  <profile>
    <id>java11+</id>
    <activation>
      <jdk>[11,)</jdk>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <!-- -Xmx64m: increases memory for tests on Travis CI -->
            <!--  jdk.tls.client.protocols: For use of older protocol since DSA is no longer in the JRE -->
            <argLine>-Xmx64m -Djdk.tls.client.protocols=TLSv1.2</argLine>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>

  </profiles>

</project>
