<?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">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.archiva</groupId>
    <artifactId>archiva-web</artifactId>
    <version>2.2.2-SNAPSHOT</version>
  </parent>

  <artifactId>archiva-webdav</artifactId>
  <packaging>bundle</packaging>
  <name>Archiva Web :: WebDAV</name>

  <properties>
    <webdav.forkMode>once</webdav.forkMode>
    <!--
    <redbackTestJdbcUrl>jdbc:derby:memory:users-test;create=true</redbackTestJdbcUrl>
    <redbackTestJdbcDriver>org.apache.derby.jdbc.EmbeddedDriver</redbackTestJdbcDriver>
    -->
    <redbackTestJdbcUrl>jdbc:hsqldb:mem:redback-test</redbackTestJdbcUrl>
    <redbackTestJdbcDriver>org.hsqldb.jdbcDriver</redbackTestJdbcDriver>
    <webdav.argLine>-Xmx512m -Xms512m -client</webdav.argLine>
  </properties>

  <dependencies>
    <!-- TODO: remove this hardcoding through a better event mechanism -->
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>audit</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-repository-scanner</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-configuration</artifactId>
      <!-- should be runtime but currently not possible due ConfigurationListener
      <scope>runtime</scope>
      -->
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-repository-admin-api</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-repository-layer</artifactId>
      <exclusions>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-proxy</artifactId>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-security</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-indexer</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-filelock</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-webdav</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>jcl-over-slf4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-model</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva.redback</groupId>
      <artifactId>redback-common-integrations</artifactId>
      <exclusions>
        <exclusion>
          <groupId>stax</groupId>
          <artifactId>stax-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva.redback</groupId>
      <artifactId>redback-keys-memory</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva.redback</groupId>
      <artifactId>redback-rbac-memory</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva.redback</groupId>
      <artifactId>redback-users-memory</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>xmlunit</groupId>
      <artifactId>xmlunit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-plus</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>net.sourceforge.htmlunit</groupId>
      <artifactId>htmlunit</artifactId>
      <version>2.13</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>xerces</groupId>
      <artifactId>xercesImpl</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-http</artifactId>
      <scope>test</scope>
      <exclusions>
        <!-- This triggers httpunit to use it instead, but it doesn't work -->
        <exclusion>
          <groupId>nekohtml</groupId>
          <artifactId>nekohtml</artifactId>
        </exclusion>
        <exclusion>
          <groupId>nekohtml</groupId>
          <artifactId>xercesMinimal</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-http-lightweight</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-test-utils</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>  
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-repository-admin-default</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva</groupId>
      <artifactId>archiva-mock</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.archiva.redback</groupId>
      <artifactId>redback-common-test-resources</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <Bundle-SymbolicName>org.apache.archiva.webdav</Bundle-SymbolicName>
            <Bundle-Version>${project.version}</Bundle-Version>
            <Export-Package>
              org.apache.archiva.webdav*;version=${project.version};-split-package:=merge-first
            </Export-Package>
            <Import-Package>
              javax.annotation,
              javax.inject,
              javax.servlet*,
              org.apache.archiva.admin.model*;version=${project.version},
              org.apache.archiva.maven2.metadata*;version=${project.version},
              org.apache.archiva.xml*;version=${project.version},
              org.apache.archiva.audit;version=${project.version},
              org.apache.archiva.common.plexusbridge;version=${project.version},
              org.apache.archiva.common.utils;version=${project.version},
              org.apache.archiva.configuration;version=${project.version},
              org.apache.archiva.indexer.*;version=${project.version},
              org.apache.archiva.model;version=${project.version},
              org.apache.archiva.policies;version=${project.version},
              org.apache.archiva.proxy;version=${project.version},
              org.apache.archiva.repository*;version=${project.version},
              org.apache.archiva.scheduler*;version=${project.version},
              org.apache.archiva.security;version=${project.version},
              org.apache.archiva.proxy.model;version=${project.version},
              org.apache.archiva.metadata.repository.storage;version=${project.version},
              org.apache.commons.io;version="[1.4,2)",
              org.apache.commons.lang;version="[2.4,3)",
              org.apache.jackrabbit.util;version="[1,3)",
              org.apache.jackrabbit.webdav*;version="[1,3)",
              org.joda.time*;version="[1.5,2)",
              org.springframework*;version="[3,4)",
              org.apache.maven.index*,
              org.apache.maven.model*,
              org.codehaus.plexus.digest,
              org.apache.archiva.redback.*,
              org.apache.archiva.redback.components.taskqueue,
              org.codehaus.plexus.util*,
              org.apache.archiva.common.filelock,
              org.codehaus.redback.integration.filter.authentication,
              org.slf4j;resolution:=optional,
              com.google.common.io
            </Import-Package>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <argLine>${webdav.argLine} ${jacocoagent}</argLine>
          <systemPropertyVariables>
            <appserver.base>${project.build.directory}/appserver-base</appserver.base>
            <plexus.home>${project.build.directory}/appserver-base</plexus.home>
            <derby.system.home>${project.build.directory}/appserver-base</derby.system.home>
            <test.resources.path>${project.build.testOutputDirectory}</test.resources.path>
            <archiva.user.configFileName>${project.build.testOutputDirectory}/repository-archiva.xml</archiva.user.configFileName>
            <redback.jdbc.url>${redbackTestJdbcUrl}</redback.jdbc.url>
            <redback.jdbc.driver.name>${redbackTestJdbcDriver}</redback.jdbc.driver.name>
            <archiva.repositorySessionFactory.id>mock</archiva.repositorySessionFactory.id>
          </systemPropertyVariables>
          <forkMode>${webdav.forkMode}</forkMode>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <configuration>
            <excludes>
              <exclude>src/main/resources/org/apache/archiva/webdav/util/mime.types</exclude>
              <exclude>src/test/resources/archiva-mime-types.txt</exclude>
              <exclude>src/test/resources/artifact.jar.sha1</exclude>
              <exclude>src/test/resources/maven-metadata.xml</exclude>
              <exclude>nbactions.xml</exclude>
            </excludes>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
