<?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">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>components-starter</artifactId>
    <version>4.0.0-M1</version>
  </parent>
  <artifactId>camel-ftp-starter</artifactId>
  <packaging>jar</packaging>
  <name>Camel SB Starters :: FTP</name>
  <description>Spring-Boot Starter for Camel FTP support</description>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>${spring-boot-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-ftp</artifactId>
      <version>${camel-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ftpserver</groupId>
      <artifactId>ftpserver-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.ftpserver</groupId>
      <artifactId>ftplet-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test-infra-ftp</artifactId>
      <version>${camel-version}</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
    <!-- for testing sftp -->
    <dependency>
      <groupId>org.apache.sshd</groupId>
      <artifactId>sshd-sftp</artifactId>
      <version>${sshd-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.sshd</groupId>
      <artifactId>sshd-scp</artifactId>
      <version>${sshd-version}</version>
      <scope>test</scope>
    </dependency>
    <!-- for testing sftp through http proxy -->
    <dependency>
      <groupId>org.littleshoot</groupId>
      <artifactId>littleproxy</artifactId>
      <version>1.1.2</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!--START OF GENERATED CODE-->
    <dependency>
      <groupId>org.apache.camel.springboot</groupId>
      <artifactId>camel-core-starter</artifactId>
    </dependency>
    <!--END OF GENERATED CODE-->
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>FileToFtpsWithCustomTrustStorePropertiesTest.java</exclude>
            <exclude>FileToFtpsImplicitSSLWithClientAuthTest.java</exclude>
            <exclude>FileToFtpsWithCustomTrustStorePropertiesTest.java</exclude>
            <exclude>FtpsTest.java</exclude>
            <exclude>SftpConsumerLocalWorkDirectoryTest.java</exclude>
            <exclude>SftpKeyExchangeProtocolsTest.java</exclude>
            <exclude>SftpSetOperationsTest.java</exclude>
            <exclude>SftpSimpleProduceThroughProxyTest.java</exclude>
            <exclude>SftpUseListFalseTest.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
