<?xml version="1.0" encoding="UTF-8"?>
<!--
   Copyright (C) 2016 Red Hat, Inc.

   Licensed 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>io.syndesis</groupId>
    <artifactId>syndesis-parent</artifactId>
    <version>1.3.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <groupId>io.syndesis.common</groupId>
  <artifactId>common-parent</artifactId>
  <version>1.3.0</version>
  <packaging>pom</packaging>

  <name>Common</name>

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <basepom.test.timeout>300</basepom.test.timeout>
    <basepom.test.timeout>150</basepom.test.timeout>
    <basepom.failsafe.timeout>0</basepom.failsafe.timeout>
    <basepom.compiler.fail-warnings>true</basepom.compiler.fail-warnings>
    <dep.plugin.compiler.version>3.7.0</dep.plugin.compiler.version>

    <syndesis-connectors.version>${project.version}</syndesis-connectors.version>

    <mockwebserver.version>0.0.15</mockwebserver.version>
    <okhttp-eventsource.version>1.3.2</okhttp-eventsource.version>
    <postgresql.version>9.1-901-1.jdbc4</postgresql.version>
    <spring.version>4.3.12.RELEASE</spring.version>
    <spring-cloud.version>Dalston.SR4</spring-cloud.version>
    <spring-cloud-sleuth.version>1.2.5.RELEASE</spring-cloud-sleuth.version>
    <spring-security.version>4.2.3.RELEASE</spring-security.version>
    <spring-social.version>1.1.4.RELEASE</spring-social.version>
    <undertow.version>1.4.21.Final</undertow.version>
    <apache-mime4j.version>0.6</apache-mime4j.version>
    <google-testing-compile.version>0.12</google-testing-compile.version>
    <google-testing-compile-guava.version>21.0</google-testing-compile-guava.version>
    <google-truth.version>0.35</google-truth.version>

    <!-- maven plugin version -->
    <dep.plugin.dependency.version>3.0.1</dep.plugin.dependency.version>


    <!-- third party plugin version -->
    <asciidoctor-maven-plugin.version>1.5.3</asciidoctor-maven-plugin.version>
    <build-helper-maven-plugin.version>1.12</build-helper-maven-plugin.version>
    <exec-maven-plugin.version>1.5.0</exec-maven-plugin.version>
    <process-exec-maven-plugin.version>0.8</process-exec-maven-plugin.version>
    <swagger-maven-plugin.version>1.0.0</swagger-maven-plugin.version>
    <swagger2markup-maven-plugin.version>1.1.0</swagger2markup-maven-plugin.version>
    <base64.version>2.3.8</base64.version>

    <!-- maven archetypes -->
    <maven-archetype-packaging.version>2.0</maven-archetype-packaging.version>
  </properties>

  <modules>
	  <module>util</module>
    <module>model</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <!-- Import Boms -->
      <dependency>
        <groupId>com.fasterxml.jackson</groupId>
        <artifactId>jackson-bom</artifactId>
        <version>${jackson.version}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!-- Internal Dependencies -->

      <dependency>
        <groupId>io.syndesis.common</groupId>
        <artifactId>common-util</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.syndesis.common</groupId>
        <artifactId>common-model</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
        <exclusions>
          <exclusion>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>${spring-security.version}</version>
        <exclusions>
          <exclusion>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-crypto</artifactId>
        <version>${spring-security.version}</version>
        <exclusions>
          <exclusion>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>${spring-security.version}</version>
        <exclusions>
          <exclusion>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${spring-security.version}</version>
        <exclusions>
          <exclusion>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring-boot.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-loader-tools</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>


      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
      </dependency>

      <dependency>
        <groupId>me.andrz.jackson</groupId>
        <artifactId>jackson-json-reference-core</artifactId>
        <version>0.2.1</version>
      </dependency>

      <dependency>
        <groupId>org.jboss.spec.javax.annotation</groupId>
        <artifactId>jboss-annotations-api_1.2_spec</artifactId>
        <version>1.0.0.Final</version>
      </dependency>

      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>23.3-jre</version>
      </dependency>

      <dependency>
        <groupId>net.jcip</groupId>
        <artifactId>jcip-annotations</artifactId>
        <version>1.0</version>
      </dependency>

      <dependency>
        <groupId>com.google.errorprone</groupId>
        <artifactId>error_prone_annotations</artifactId>
        <version>2.0.19</version>
      </dependency>

      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy</artifactId>
        <version>2.4.12</version>
      </dependency>

      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.2.1</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.14</version>
      </dependency>

      <!-- Testing Dependencies -->
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${assertj-core.version}</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>${postgresql.version}</version>
        <scope>runtime</scope>
      </dependency>

      <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>${derby.version}</version>
      </dependency>

      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>1.10.19</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.awaitility</groupId>
        <artifactId>awaitility</artifactId>
        <version>3.0.0</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>com.github.tomakehurst</groupId>
        <artifactId>wiremock-standalone</artifactId>
        <version>2.7.1</version>
        <scope>test</scope>
      </dependency>

      <!-- Only here to exclude commons-logging transitive dependency - not direct dependency-->
      <dependency>
        <groupId>org.apache.james</groupId>
        <artifactId>apache-mime4j</artifactId>
        <version>${apache-mime4j.version}</version>
        <scope>runtime</scope>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>net.iharder</groupId>
        <artifactId>base64</artifactId>
        <version>${base64.version}</version>
      </dependency>

    </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <version>${spring-boot.version}</version>
        </plugin>
        <plugin>
          <groupId>io.fabric8</groupId>
          <artifactId>fabric8-maven-plugin</artifactId>
        </plugin>
        <plugin>
          <groupId>dk.nykredit.swagger</groupId>
          <artifactId>swagger-maven-plugin</artifactId>
          <version>${swagger-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>io.github.swagger2markup</groupId>
          <artifactId>swagger2markup-maven-plugin</artifactId>
          <version>${swagger2markup-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.asciidoctor</groupId>
          <artifactId>asciidoctor-maven-plugin</artifactId>
          <version>${asciidoctor-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>com.bazaarvoice.maven.plugins</groupId>
          <artifactId>process-exec-maven-plugin</artifactId>
          <version>${process-exec-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>${exec-maven-plugin.version}</version>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>

      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <inherited>true</inherited>
        <configuration>
          <environmentVariables>
            <ENV_VAR_EXISTS>value</ENV_VAR_EXISTS>
            <ENV_VAR_EXISTS_BOOLEAN>true</ENV_VAR_EXISTS_BOOLEAN>
          </environmentVariables>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-gpg-plugin</artifactId>
        <configuration>
          <passphrase>${gpg.passphrase}</passphrase>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.basepom.maven</groupId>
        <artifactId>duplicate-finder-maven-plugin</artifactId>
        <configuration>
          <ignoredClassPatterns>
            <ignoredUnusedDeclaredDependency>com.fasterxml.jackson.datatype:jackson-datatype-jdk8</ignoredUnusedDeclaredDependency>
            <ignoredClassPattern>io.fabric8.kubernetes.client.*</ignoredClassPattern>
            <ignoredClassPattern>org.infinispan.*</ignoredClassPattern>
            <ignoredClassPattern>org.springframework.security.crypto.*</ignoredClassPattern>
            <ignoredClassPattern>org.objectweb.asm.*</ignoredClassPattern>
            <ignoredClassPattern>javax.ws.*</ignoredClassPattern>
            <ignoredClassPattern>org.apache.camel.json.simple.*</ignoredClassPattern>
          </ignoredClassPatterns>
          <ignoredResourcePatterns>
            <ignoredResourcePattern>features.xml</ignoredResourcePattern>
            <ignoredResourcePattern>org/infinispan/.*</ignoredResourcePattern>
            <ignoredResourcePattern>ValidationMessages.properties</ignoredResourcePattern>
            <ignoredResourcePattern>about.html</ignoredResourcePattern>
            <ignoredResourcePattern>draftv3/schema</ignoredResourcePattern>
            <ignoredResourcePattern>draftv4/schema</ignoredResourcePattern>
          </ignoredResourcePatterns>
        </configuration>
      </plugin>

    </plugins>
  </build>

  <profiles>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce-no-snapshots</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireReleaseDeps>
                      <message>No Snapshots Allowed!</message>
                    </requireReleaseDeps>
                    <bannedDependencies>
                      <excludes>
                        <exclude>commons-logging</exclude>
                      </excludes>
                    </bannedDependencies>
                  </rules>
                  <fail>false</fail>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>doclint-java8-disable</id>
      <activation>
        <jdk>[1.8,)</jdk>
      </activation>
      <properties>
        <javadoc.opts>-Xdoclint:none</javadoc.opts>
      </properties>
    </profile>
    <profile>
      <id>ci</id>
      <properties>
        <user.home>/home/jenkins</user.home>
        <fabric8.namespace>syndesis-ci</fabric8.namespace>
        <fabric8.mode>openshift</fabric8.mode>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>deploy</id>
      <activation>
        <property>
          <name>deploy</name>
        </property>
      </activation>
      <build>
        <defaultGoal>clean package</defaultGoal>
      </build>
    </profile>
    <profile>
      <id>non-m2e</id>
      <activation>
        <!-- active only when not running under M2E in Eclipse -->
        <property>
          <name>!m2e.version</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <compilerId>javac-with-errorprone</compilerId>
              <forceJavacCompilerUse>true</forceJavacCompilerUse>
              <compilerArgs>
                <arg>-Xlint:all</arg>
                <arg>-Xlint:-deprecation</arg>
                <arg>-Xlint:-processing</arg>
                <arg>-Xlint:-serial</arg>
                <arg>-Werror</arg>
                <arg>-XepDisableWarningsInGeneratedCode</arg>
                <arg>-implicit:none</arg>
              </compilerArgs>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.plexus</groupId>
                <artifactId>plexus-compiler-javac-errorprone</artifactId>
                <version>2.8.2</version>
              </dependency>
              <!-- override plexus-compiler-javac-errorprone's dependency on
               Error Prone with the latest version -->
              <dependency>
                <groupId>com.google.errorprone</groupId>
                <artifactId>error_prone_core</artifactId>
                <version>2.1.2</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
