<?xml version="1.0" encoding="UTF-8"?>
<!--

    This file is part of java-parent. It is subject to the license terms in the LICENSE file found in the top-level
    directory of this distribution and at http://creativecommons.org/publicdomain/zero/1.0/. No part of java-parent,
    including this file, may be copied, modified, propagated, or distributed except according to the terms contained
    in the LICENSE file.

-->
<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                                  -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <parent>
    <groupId>com.github.sebhoss</groupId>
    <artifactId>superpom</artifactId>
    <version>4.0.0</version>
  </parent>

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!--                               INFORMATIONS                              -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <artifactId>java-parent</artifactId>
  <version>3.0.0</version>
  <packaging>pom</packaging>
  <inceptionYear>2013</inceptionYear>
  <url>https://github.com/sebhoss/java-parent</url>
  <name>Java Parent</name>
  <description>Parent POM for all Java-based projects</description>

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!--                                  SOURCE                                 -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <scm>
    <connection>scm:git:git://github.com/sebhoss/java-parent.git</connection>
    <developerConnection>scm:git:git@github.com:sebhoss/java-parent.git</developerConnection>
    <tag>master</tag>
    <url>${project.url}</url>
  </scm>

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!--                                PROPERTIES                               -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <properties>
    <version.jdk>1.8</version.jdk>

    <jacoco.lineCoverage>1.00000</jacoco.lineCoverage>
    <pit.mutationCoverage>100</pit.mutationCoverage>
    <pit.threads>8</pit.threads>
    <pmd.minimumTokens>50</pmd.minimumTokens>
    <pmd.failurePriority>0</pmd.failurePriority>
    <findbugs.effort>Max</findbugs.effort>
    <findbugs.threshold>Low</findbugs.threshold>
    <failBuildOnDuplicates>true</failBuildOnDuplicates>
    <failBuildOnDependencyVersionProblem>true</failBuildOnDependencyVersionProblem>
    <failBuildOnDependencyProblem>true</failBuildOnDependencyProblem>

    <version.m-pmd-p>3.6</version.m-pmd-p>
    <version.m-javadoc-p>2.10.3</version.m-javadoc-p>
    <version.m-dependency-p>2.10</version.m-dependency-p>
    <version.m-dependency-versions-check-p>2.0.2</version.m-dependency-versions-check-p>
    <version.m-remote-resources-p>1.5</version.m-remote-resources-p>
    <version.m-bundle-p>3.0.1</version.m-bundle-p>
    <version.m-jar-p>2.6</version.m-jar-p>
    <version.m-compiler-p>3.5.1</version.m-compiler-p>
    <version.m-source-p>3.0.0</version.m-source-p>
    <version.findbugs-m-p>3.0.3</version.findbugs-m-p>
    <version.pittest-m-p>1.1.9</version.pittest-m-p>
    <version.duplicate-finder-m-p>1.2.1</version.duplicate-finder-m-p>
    <version.coveralls-m-p>4.1.0</version.coveralls-m-p>
    <version.jacoco-m-p>0.7.6.201602180812</version.jacoco-m-p>
    <version.m-surefire-report-p>2.19.1</version.m-surefire-report-p>
    <version.dependency-check-m>1.3.4</version.dependency-check-m>

    <version.tycho-compiler-jdt>0.24.0</version.tycho-compiler-jdt>
    <version.jdt-settings>2.0.0</version.jdt-settings>
  </properties>

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!--                                   BUILD                                 -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <!-- https://maven.apache.org/plugins/maven-source-plugin/ -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>${version.m-source-p}</version>
          <configuration>
            <!-- https://maven.apache.org/plugins/maven-source-plugin/jar-no-fork-mojo.html#archive -->
            <archive>
              <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
            </archive>
          </configuration>
          <executions>
            <execution>
              <id>attach-sources</id>
              <phase>verify</phase>
              <goals>
                <!-- https://maven.apache.org/plugins/maven-source-plugin/jar-no-fork-mojo.html -->
                <goal>jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- https://maven.apache.org/plugins/maven-javadoc-plugin/ -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${version.m-javadoc-p}</version>
          <configuration>
            <!-- https://maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html#outputDirectory -->
            <outputDirectory>${project.build.directory}/api</outputDirectory>
            <!-- https://maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html#archive -->
            <archive>
              <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
            </archive>
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <!-- https://maven.apache.org/plugins/maven-javadoc-plugin/jar-mojo.html -->
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- https://maven.apache.org/plugins/maven-compiler-plugin/ -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${version.m-compiler-p}</version>
          <configuration>
            <!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#source -->
            <source>${version.jdk}</source>
            <!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#target -->
            <target>${version.jdk}</target>
            <!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerId -->
            <compilerId>jdt</compilerId>
            <!-- https://eclipse.org/tycho/sitedocs/tycho-compiler-plugin/compile-mojo.html#useProjectSettings -->
            <useProjectSettings>true</useProjectSettings>
            <!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerArgument -->
            <!-- https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javac.html -->
            <compilerArgument>-parameters</compilerArgument>
          </configuration>
          <dependencies>
            <!-- This dependency provides the implementation of compiler "jdt" -->
            <dependency>
              <!-- https://eclipse.org/tycho/sitedocs/ -->
              <groupId>org.eclipse.tycho</groupId>
              <artifactId>tycho-compiler-jdt</artifactId>
              <version>${version.tycho-compiler-jdt}</version>
            </dependency>
          </dependencies>
        </plugin>

        <plugin>
          <!-- https://maven.apache.org/plugins/maven-jar-plugin/ -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>${version.m-jar-p}</version>
          <configuration>
            <!-- https://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html#archive -->
            <archive>
              <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
            </archive>
          </configuration>
        </plugin>

        <plugin>
          <!-- http://felix.apache.org/components/bundle-plugin/ -->
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <version>${version.m-bundle-p}</version>
          <executions>
            <execution>
              <id>bundle-manifest</id>
              <phase>process-classes</phase>
              <goals>
                <!-- http://felix.apache.org/components/bundle-plugin/manifest-mojo.html -->
                <goal>manifest</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <!-- http://felix.apache.org/components/bundle-plugin/manifest-mojo.html#instructions -->
            <instructions>
              <Bundle-Copyright>${project.developers[0].name} (${project.developers[0].email})</Bundle-Copyright>
              <Bundle-DocURL>${project.url}</Bundle-DocURL>
            </instructions>
          </configuration>
        </plugin>

        <plugin>
          <!-- http://gleclaire.github.io/findbugs-maven-plugin/ -->
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>findbugs-maven-plugin</artifactId>
          <version>${version.findbugs-m-p}</version>
          <configuration>
            <!-- http://gleclaire.github.io/findbugs-maven-plugin/check-mojo.html#effort -->
            <effort>${findbugs.effort}</effort>
            <!-- http://gleclaire.github.io/findbugs-maven-plugin/check-mojo.html#threshold -->
            <threshold>${findbugs.threshold}</threshold>
          </configuration>
          <executions>
            <execution>
              <goals>
                <!-- http://gleclaire.github.io/findbugs-maven-plugin/check-mojo.html -->
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- https://maven.apache.org/plugins/maven-pmd-plugin/ -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <version>${version.m-pmd-p}</version>
          <configuration>
            <!-- https://maven.apache.org/plugins/maven-pmd-plugin/check-mojo.html#failurePriority -->
            <failurePriority>${pmd.failurePriority}</failurePriority>
            <!-- https://maven.apache.org/plugins/maven-pmd-plugin/cpd-mojo.html#minimumTokens -->
            <minimumTokens>${pmd.minimumTokens}</minimumTokens>
            <!-- https://maven.apache.org/plugins/maven-pmd-plugin/pmd-mojo.html#targetJdk -->
            <targetJdk>${version.jdk}</targetJdk>
          </configuration>
          <executions>
            <execution>
              <goals>
                <!-- https://maven.apache.org/plugins/maven-pmd-plugin/check-mojo.html -->
                <goal>check</goal>
                <!-- https://maven.apache.org/plugins/maven-pmd-plugin/cpd-check-mojo.html -->
                <goal>cpd-check</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- http://eclemma.org/jacoco/trunk/doc/maven.html -->
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>${version.jacoco-m-p}</version>
          <executions>
            <execution>
              <id>prepare-coverage-agent</id>
              <goals>
                <!-- http://eclemma.org/jacoco/trunk/doc/prepare-agent-mojo.html -->
                <goal>prepare-agent</goal>
              </goals>
            </execution>
            <execution>
              <id>check-coverage</id>
              <goals>
                <!-- http://eclemma.org/jacoco/trunk/doc/check-mojo.html -->
                <goal>check</goal>
              </goals>
              <configuration>
                <!-- http://eclemma.org/jacoco/trunk/doc/check-mojo.html#rules -->
                <rules>
                  <rule>
                    <element>CLASS</element>
                    <excludes>
                      <exclude>*Test</exclude>
                    </excludes>
                    <limits>
                      <limit>
                        <counter>LINE</counter>
                        <value>COVEREDRATIO</value>
                        <minimum>${jacoco.lineCoverage}</minimum>
                      </limit>
                    </limits>
                  </rule>
                </rules>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- https://github.com/trautonen/coveralls-maven-plugin -->
          <groupId>org.eluder.coveralls</groupId>
          <artifactId>coveralls-maven-plugin</artifactId>
          <version>${version.coveralls-m-p}</version>
          <configuration>
            <repoToken>${COVERALLS_TOKEN}</repoToken>
          </configuration>
        </plugin>

        <plugin>
          <!-- https://maven.apache.org/plugins/maven-remote-resources-plugin/ -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-remote-resources-plugin</artifactId>
          <version>${version.m-remote-resources-p}</version>
          <executions>
            <execution>
              <id>jdt-settings</id>
              <goals>
                <!-- https://maven.apache.org/plugins/maven-remote-resources-plugin/process-mojo.html -->
                <goal>process</goal>
              </goals>
              <configuration>
                <!-- https://maven.apache.org/plugins/maven-remote-resources-plugin/process-mojo.html#attachToMain -->
                <attachToMain>false</attachToMain>
                <!-- https://maven.apache.org/plugins/maven-remote-resources-plugin/process-mojo.html#attachToTest -->
                <attachToTest>false</attachToTest>
                <!-- https://maven.apache.org/plugins/maven-remote-resources-plugin/process-mojo.html#resourceBundles -->
                <resourceBundles>
                  <resourceBundle>com.github.sebhoss:jdt-settings:${version.jdt-settings}</resourceBundle>
                </resourceBundles>
                <!-- https://maven.apache.org/plugins/maven-remote-resources-plugin/process-mojo.html#outputDirectory -->
                <outputDirectory>${project.basedir}/.settings</outputDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- https://github.com/basepom/duplicate-finder-maven-plugin -->
          <groupId>org.basepom.maven</groupId>
          <artifactId>duplicate-finder-maven-plugin</artifactId>
          <version>${version.duplicate-finder-m-p}</version>
          <executions>
            <execution>
              <phase>verify</phase>
              <goals>
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <!-- https://github.com/basepom/duplicate-finder-maven-plugin/wiki#configuration-overview -->
            <ignoredResourcePatterns>
              <ignoredResourcePattern>.*\.html</ignoredResourcePattern>
            </ignoredResourcePatterns>
            <failBuildInCaseOfConflict>${failBuildOnDuplicates}</failBuildInCaseOfConflict>
          </configuration>
        </plugin>

        <plugin>
          <!-- https://github.com/ning/maven-dependency-versions-check-plugin -->
          <groupId>com.ning.maven.plugins</groupId>
          <artifactId>maven-dependency-versions-check-plugin</artifactId>
          <version>${version.m-dependency-versions-check-p}</version>
          <executions>
            <execution>
              <phase>verify</phase>
              <goals>
                <!-- https://github.com/ning/maven-dependency-versions-check-plugin#the-check-goal -->
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <!-- https://github.com/ning/maven-dependency-versions-check-plugin#failbuildincaseofconflict-check-only -->
            <failBuildInCaseOfConflict>${failBuildOnDependencyVersionProblem}</failBuildInCaseOfConflict>
          </configuration>
        </plugin>

        <plugin>
          <!-- https://maven.apache.org/plugins/maven-dependency-plugin/ -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>${version.m-dependency-p}</version>
          <executions>
            <execution>
              <goals>
                <!-- https://maven.apache.org/plugins/maven-dependency-plugin/analyze-only-mojo.html -->
                <goal>analyze-only</goal>
                <!-- https://maven.apache.org/plugins/maven-dependency-plugin/analyze-duplicate-mojo.html -->
                <goal>analyze-duplicate</goal>
                <!-- https://maven.apache.org/plugins/maven-dependency-plugin/analyze-dep-mgt-mojo.html -->
                <goal>analyze-dep-mgt</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <!-- https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#failOnWarning -->
            <failOnWarning>${failBuildOnDependencyProblem}</failOnWarning>
            <!-- https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#ignoredDependencies -->
            <ignoredDependencies>
              <ignoredDependency>com.github.sebhoss:suppress-warnings</ignoredDependency>
            </ignoredDependencies>
          </configuration>
        </plugin>

        <plugin>
          <!-- http://pitest.org/quickstart/maven/ -->
          <groupId>org.pitest</groupId>
          <artifactId>pitest-maven</artifactId>
          <version>${version.pittest-m-p}</version>
          <configuration>
            <threads>${pit.threads}</threads>
            <mutationThreshold>${pit.mutationCoverage}</mutationThreshold>
            <skip>${skipTests}</skip>
            <targetClasses>
              <param>com.github.sebhoss*</param>
            </targetClasses>
            <targetTests>
              <param>com.github.sebhoss*</param>
            </targetTests>
          </configuration>
          <executions>
            <execution>
              <goals>
                <goal>mutationCoverage</goal>
              </goals>
              <phase>verify</phase>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- https://jeremylong.github.io/DependencyCheck/dependency-check-maven/index.html -->
          <groupId>org.owasp</groupId>
          <artifactId>dependency-check-maven</artifactId>
          <version>${version.dependency-check-m}</version>
          <executions>
            <execution>
              <goals>
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>

    <!-- Default build for all java projects include the following plugins -->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.eluder.coveralls</groupId>
        <artifactId>coveralls-maven-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.basepom.maven</groupId>
        <artifactId>duplicate-finder-maven-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>com.ning.maven.plugins</groupId>
        <artifactId>maven-dependency-versions-check-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.owasp</groupId>
        <artifactId>dependency-check-maven</artifactId>
      </plugin>

      <plugin>
        <groupId>org.pitest</groupId>
        <artifactId>pitest-maven</artifactId>
      </plugin>
    </plugins>
  </build>

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!--                                 REPORTING                               -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>${version.m-surefire-report-p}</version>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>${version.m-pmd-p}</version>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${version.m-javadoc-p}</version>
        <configuration>
          <outputDirectory>${project.build.directory}/api</outputDirectory>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>${version.findbugs-m-p}</version>
      </plugin>
    </plugins>
  </reporting>
</project>
