<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.continuum</groupId>
    <artifactId>continuum-buildagent</artifactId>
    <version>1.4.1</version>
  </parent>
  <artifactId>continuum-buildagent-webdav-client</artifactId>
  <version>1.4.1</version>
  <name>Continuum :: Distributed Build :: Build Agent :: Webdav Client</name>
  <dependencies>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpcore</artifactId>
      <version>4.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-webdav</artifactId>
      <version>2.2.7</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.1</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
  <build>
    <!--
    To execute the sample working copy webdav client, just execute "mvn exec:java".

    By default, the sample webdav client gets the POM file of the Continuum project with id "1"
    from the working copy directory. Change the values of the continuumProjectId and pomFile
    properties depending on the contents of the continuum-buildagent's working directory you
    are running this against.
    -->
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <configuration>
          <executable>java</executable>
          <mainClass>org.apache.continuum.buildagent.webdav.client.WorkingCopyWebdavClient</mainClass>
          <arguments>
            <argument>${url}/workingcopy/${continuumProjectId}/${pomFile}</argument>
            <argument>${sharedSecretPassword}</argument>
          </arguments>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <includes>
                    <!--
                     Needed during runtime by httpclient. This module isn't included in webapp so it
                     should be alright to include commons-logging
                     -->
                    <include>commons-logging:commons-logging:1.1.1:jar:runtime</include>
                  </includes>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <properties>
    <url>http://localhost:${port}/continuum-buildagent</url>
    <port>8181</port>
    <sharedSecretPassword>secret</sharedSecretPassword>
    <continuumProjectId>1</continuumProjectId>
    <pomFile>pom.xml</pomFile>
  </properties>
</project>
