<?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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>21</version>
  </parent>

  <groupId>org.apache.plc4x</groupId>
  <artifactId>plc4x-parent</artifactId>
  <version>0.6.0</version>
  <packaging>pom</packaging>

  <name>PLC4X</name>
  <description>
    PLC4X is an effort to create a universal library for accessing industrial programmable logic controllers
    using a variety of protocols using a uniform API.
  </description>
  <url>https://plc4x.apache.org</url>
  <inceptionYear>2017</inceptionYear>

  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/plc4x.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/plc4x.git</developerConnection>
    <url>https://github.com/apache/plc4x</url>
    <tag>release/0.6.0</tag>
  </scm>

  <!-- Only configure the site distribution as the rest is handled by the apache parent -->
  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>scm:git:https://gitbox.apache.org/repos/asf/plc4x-website.git</url>
    </site>
  </distributionManagement>

  <issueManagement>
    <system>Jira</system>
    <url>https://issues.apache.org/jira/browse/PLC4X</url>
  </issueManagement>

  <mailingLists>
    <mailingList>
      <name>Apache PLC4X Developer List</name>
      <subscribe>mailto:dev-subscribe@plc4x.apache.org</subscribe>
      <unsubscribe>mailto:dev-unsubscribe@plc4x.apache.org</unsubscribe>
      <post>mailto:dev@plc4x.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/plc4x-dev/</archive>
    </mailingList>
    <mailingList>
      <name>PLC4X Commits List</name>
      <subscribe>mailto:commit-subscribe@plc4x.apache.org</subscribe>
      <unsubscribe>mailto:commits-unsubscribe@plc4x.apache.org</unsubscribe>
      <post>mailto:commits@plc4x.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/plc4x-commits/</archive>
    </mailingList>
    <mailingList>
      <name>PLC4X Jira Notifications List</name>
      <subscribe>mailto:issues-subscribe@plc4x.apache.org</subscribe>
      <unsubscribe>mailto:issues-unsubscribe@plc4x.apache.org</unsubscribe>
      <post>mailto:issues@plc4x.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/plc4x-issues/</archive>
    </mailingList>
  </mailingLists>

  <properties>
    <!--
      At least 3.3.3 required for camel-package-maven-plugin
    -->
    <maven.version>3.3.3</maven.version>

    <java.version>1.8</java.version>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputencoding>UTF-8</project.reporting.outputencoding>

    <!-- Timestamp for the reproducible builds -->
    <project.build.outputTimestamp>2019-11-01T10:30:00Z</project.build.outputTimestamp>

    <!-- URL of the ASF SonarQube server -->
    <sonar.host.url>https://builds.apache.org/analysis</sonar.host.url>
    <!-- Exclude all generated code -->
    <sonar.exclusions>**/generated-sources</sonar.exclusions>

    <plc4x-code-generation.version>1.1.0</plc4x-code-generation.version>

    <antlr.version>4.7.2</antlr.version>
    <asm.version>5.0.4</asm.version>
    <assertj.version>3.11.1</assertj.version>
    <bouncycastle.version>1.60</bouncycastle.version>
    <boost.version>1.71.0</boost.version>
    <boost.version.underline-short>1_71</boost.version.underline-short>
    <boost.version.underline>${boost.version.underline-short}_0</boost.version.underline>
    <byte-buddy.version>1.9.10</byte-buddy.version>
    <cmake-version>3.16.0</cmake-version>
    <commons-codec.version>1.12</commons-codec.version>
    <commons-collections4.version>4.1</commons-collections4.version>
    <commons-configuration2.version>2.6</commons-configuration2.version>
    <commons-io.version>2.6</commons-io.version>
    <commons-lang.version>2.6</commons-lang.version>
    <commons-lang3.version>3.7</commons-lang3.version>
    <commons-logging.version>1.2</commons-logging.version>
    <commons-math3.version>3.5</commons-math3.version>
    <commons-pool2.version>2.6.0</commons-pool2.version>
    <commons-text.version>1.8</commons-text.version>
    <crc.version>1.0.1</crc.version>
    <elasticsearch.version>7.4.0</elasticsearch.version>
    <equalsverifier.version>3.0.2</equalsverifier.version>
    <findbugs.version>3.0.1</findbugs.version>
    <freemarker.version>2.3.28</freemarker.version>
    <groovy.version>2.5.8</groovy.version>
    <gson.version>2.8.5</gson.version>
    <guava.version>27.0.1-jre</guava.version>
    <hamcrest.version>1.3</hamcrest.version>
    <httpclient.version>4.5.10</httpclient.version>
    <jackson.version>2.10.0</jackson.version>
    <jmh.version>1.21</jmh.version>
    <jna.version>5.3.1</jna.version>
    <joda-time.version>2.10.5</joda-time.version>
    <jopt-simple.version>5.0.2</jopt-simple.version>
    <jserialcom.version>2.5.1</jserialcom.version>
    <junit.jupiter.version>5.5.0</junit.jupiter.version>
    <junit.platform.version>1.3.2</junit.platform.version>
    <junit.version>4.12</junit.version>
    <log4j.version>2.11.1</log4j.version>
    <logback.version>1.2.3</logback.version>
    <logstash.version>7.4.0</logstash.version>
    <lucene.version>8.2.0</lucene.version>
    <metrics-core.version>3.1.2</metrics-core.version>
    <mockito.version>2.24.5</mockito.version>
    <netty.version>4.1.39.Final</netty.version>
    <owasp-dependency-check.version>5.0.0-M1</owasp-dependency-check.version>
    <pcap4j.version>1.8.2</pcap4j.version>
    <scala.version>2.12.6</scala.version>
    <slf4j.version>1.7.25</slf4j.version>
    <snakeyaml.version>1.23</snakeyaml.version>
    <spock-reports.version>1.6.1</spock-reports.version>
    <spock.version>1.2-groovy-2.5</spock.version>
    <t-digest.version>3.2</t-digest.version>
    <thrift.version>0.13.0</thrift.version>
    <xmlunit.version>2.6.3</xmlunit.version>

    <!-- Site properties -->
    <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
    <asciidoctorj.version>2.0.0</asciidoctorj.version>
    <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
    <reflow.skin.version>1.5.0</reflow.skin.version>
    <bootstrap.version>3.3.7</bootstrap.version>
    <jquery.version>3.3.1</jquery.version>
    <anchorjs.version>3.2.2</anchorjs.version>
    <fontawesome.version>5.2.0</fontawesome.version>
  </properties>

  <modules>
    <module>build-utils</module>

    <!-- Definition of the protocol message formats -->
    <module>protocols</module>

    <!-- Build the Java part of plc4x -->
    <module>plc4j</module>

    <!-- Tools needed throughout the build -->
    <module>tools</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <!--
        Set to provided to ensure that these jars are never automatically
        included. If required the used still can override it if it is needed. -->
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${logback.version}</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>com.athaydes</groupId>
        <artifactId>spock-reports</artifactId>
        <version>${spock-reports.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fazecast</groupId>
        <artifactId>jSerialComm</artifactId>
        <version>${jserialcom.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-cbor</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-smile</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>${jackson.version}</version>
        <exclusions>
          <exclusion>
            <groupId>jakarta.activation</groupId>
            <artifactId>jakarta.activation-api</artifactId>
          </exclusion>
          <exclusion>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.code.findbugs</groupId>
        <artifactId>jsr305</artifactId>
        <version>${findbugs.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>${gson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
      </dependency>
      <dependency>
        <groupId>com.tdunning</groupId>
        <artifactId>t-digest</artifactId>
        <version>${t-digest.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>${commons-codec.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>${commons-logging.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard</groupId>
        <artifactId>metrics-core</artifactId>
        <version>${metrics-core.version}</version>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-buffer</artifactId>
        <version>${netty.version}</version>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-codec</artifactId>
        <version>${netty.version}</version>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-codec-http</artifactId>
        <version>${netty.version}</version>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-common</artifactId>
        <version>${netty.version}</version>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-handler</artifactId>
        <version>${netty.version}</version>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-resolver</artifactId>
        <version>${netty.version}</version>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-transport</artifactId>
        <version>${netty.version}</version>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-transport-rxtx</artifactId>
        <version>${netty.version}</version>
      </dependency>
      <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>1.3.5</version>
      </dependency>
      <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
        <version>2.0.2</version>
      </dependency>
      <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.2</version>
      </dependency>
      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
      </dependency>
      <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>1.1.6</version>
      </dependency>
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>${joda-time.version}</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
      </dependency>
      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy</artifactId>
        <version>${byte-buddy.version}</version>
      </dependency>
      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy-agent</artifactId>
        <version>${byte-buddy.version}</version>
      </dependency>
      <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>${jna.version}</version>
      </dependency>
      <dependency>
        <groupId>net.sf.jopt-simple</groupId>
        <artifactId>jopt-simple</artifactId>
        <version>${jopt-simple.version}</version>
      </dependency>
      <dependency>
        <groupId>nl.jqno.equalsverifier</groupId>
        <artifactId>equalsverifier</artifactId>
        <version>${equalsverifier.version}</version>
      </dependency>
      <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <version>${antlr.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>${commons-collections4.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-configuration2</artifactId>
        <version>${commons-configuration2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-jexl3</artifactId>
        <version>3.1</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${commons-lang3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math3</artifactId>
        <version>${commons-math3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>${commons-pool2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>${commons-text.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.4.12</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-analyzers-common</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-backward-codecs</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-core</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-grouping</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-highlighter</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-join</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-memory</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-misc</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-queries</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-queryparser</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-sandbox</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-spatial3d</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-spatial</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-spatial-extras</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-suggest</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-artifact</artifactId>
        <version>${maven.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-utils</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.plc4x.plugins</groupId>
        <artifactId>plc4x-code-generation-types-base</artifactId>
        <version>${plc4x-code-generation.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.plc4x.plugins</groupId>
        <artifactId>plc4x-code-generation-language-base</artifactId>
        <version>${plc4x-code-generation.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.plc4x.plugins</groupId>
        <artifactId>plc4x-code-generation-protocol-base</artifactId>
        <version>${plc4x-code-generation.version}</version>
      </dependency>
      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${assertj.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcmail-jdk15on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy</artifactId>
        <version>${groovy.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-json</artifactId>
        <version>${groovy.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-templates</artifactId>
        <version>${groovy.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-test-junit5</artifactId>
        <version>${groovy.version}</version>
        <!-- Ensure we only use this in test -->
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-xml</artifactId>
        <version>${groovy.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.woodstox</groupId>
        <artifactId>stax2-api</artifactId>
        <version>4.1</version>
      </dependency>
      <dependency>
        <groupId>org.dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>2.1.1</version>
      </dependency>
      <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
      </dependency>
      <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch-x-content</artifactId>
        <version>${elasticsearch.version}</version>
      </dependency>
      <dependency>
        <groupId>org.elasticsearch.plugin</groupId>
        <artifactId>transport-netty4-client</artifactId>
        <version>${elasticsearch.version}</version>
      </dependency>
      <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>${freemarker.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.jinahya</groupId>
        <artifactId>bit-io</artifactId>
        <version>1.4.3</version>
      </dependency>
      <dependency>
        <groupId>com.github.snksoft</groupId>
        <artifactId>crc</artifactId>
        <version>${crc.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-core</artifactId>
        <version>${hamcrest.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-library</artifactId>
        <version>${hamcrest.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jdom</groupId>
        <artifactId>jdom2</artifactId>
        <version>2.0.6</version>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.jupiter.version}</version>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>${junit.jupiter.version}</version>
      </dependency>
      <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <version>${junit.jupiter.version}</version>
      </dependency>
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <version>1.5.0</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>${mockito.version}</version>
      </dependency>
      <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-core</artifactId>
        <version>${jmh.version}</version>
      </dependency>
      <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-generator-annprocess</artifactId>
        <version>${jmh.version}</version>
      </dependency>
      <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm</artifactId>
        <version>${asm.version}</version>
      </dependency>
      <dependency>
        <groupId>org.pcap4j</groupId>
        <artifactId>pcap4j-core</artifactId>
        <version>${pcap4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.pcap4j</groupId>
        <artifactId>pcap4j-packetfactory-static</artifactId>
        <version>${pcap4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-core</artifactId>
        <version>${spock.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.xmlunit</groupId>
        <artifactId>xmlunit-core</artifactId>
        <version>${xmlunit.version}</version>
      </dependency>
      <dependency>
        <groupId>org.xmlunit</groupId>
        <artifactId>xmlunit-matchers</artifactId>
        <version>${xmlunit.version}</version>
      </dependency>
      <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>${snakeyaml.version}</version>
      </dependency>
      <dependency>
        <groupId>xml-apis</groupId>
        <artifactId>xml-apis</artifactId>
        <version>1.4.01</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <!-- Make some additional properties available to simplify keeping some content up to date -->
      <plugin>
        <groupId>org.codehaus.gmaven</groupId>
        <artifactId>groovy-maven-plugin</artifactId>
        <executions>
          <!-- Do some pre-build checks and report any findings to the user -->
          <execution>
            <id>prerequisite-check</id>
            <phase>validate</phase>
            <goals>
              <goal>execute</goal>
            </goals>
            <inherited>false</inherited>
            <configuration>
              <source>${project.basedir}/src/main/script/prerequisiteCheck.groovy</source>
            </configuration>
          </execution>
          <!-- Set some dynamic variables which are useful for the site generation -->
          <execution>
            <id>provide-custom-properties</id>
            <phase>pre-site</phase>
            <goals>
              <goal>execute</goal>
            </goals>
            <configuration>
              <source>
                print "\nCalculating some additional properties:"
                // Get the current year
                def currentYear = Calendar.getInstance().get(Calendar.YEAR) as String
                print "\nCurrent year:                     " + currentYear
                project.properties['current-year'] = currentYear

                // Calculate some version related stuff
                def currentVersion = project.version as String
                def match = (currentVersion =~ /(\d+)\.(\d+)\.(\d+)(-SNAPSHOT)?/)
                print "\nCurrent version:                  " + currentVersion
                if(match.count &gt;= 1) {
                  def majorVersion = match[0][1] as Integer
                  def minorVersion = match[0][2] as Integer
                  def bugfixVersion = match[0][3] as Integer

                  def currentFullVersion = majorVersion + "." + minorVersion + "." + bugfixVersion
                  def currentShortVersion = majorVersion + "." + minorVersion
                  def currentNextIncrementalVersion = majorVersion + "." + minorVersion + "." + (bugfixVersion + 1)
                  def currentNextMinorVersion = majorVersion + "." + (minorVersion + 1) + ".0"

                  print "\nCurrent full version:             " + currentFullVersion + " (current-full-version)"
                  project.properties['current-full-version'] = currentFullVersion
                  print "\nCurrent short version:            " + currentShortVersion + "   (current-short-version)"
                  project.properties['current-short-version'] = currentShortVersion
                  print "\nCurrent next incremental version: " + currentNextIncrementalVersion + " (current-next-incremental-version)"
                  project.properties['current-next-incremental-version'] = currentNextIncrementalVersion
                  print "\nCurrent next minor version:       " + currentNextMinorVersion + " (current-next-minor-version)"
                  project.properties['current-next-minor-version'] = currentNextMinorVersion
                }
                print "\n"
              </source>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.5</version>
          </dependency>
        </dependencies>
      </plugin>

      <!-- Write all the properties into a file so we can access them from asciidoctor -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>pre-site</phase>
            <goals>
              <goal>write-project-properties</goal>
            </goals>
            <configuration>
              <outputFile>${project.build.directory}/pom.adoc</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- Check if all source files have the required apache license headers -->
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <executions>
          <execution>
            <id>license-check</id>
            <phase>verify</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <useMavenDefaultExcludes>true</useMavenDefaultExcludes>
          <excludes>
            <!-- Git related files -->
            <exclude>**/.git/**</exclude>
            <exclude>**/.gitignore</exclude>

            <!-- License Files for other licenses -->
            <exclude>**/UNLICENSE</exclude>
            <!--
              Explicitly exclude this file as I was unable
              to add a new license to the configuration.
            -->
            <exclude>**/Expression.g4</exclude>

            <!-- Maven related files -->
            <exclude>**/target/**</exclude>
            <exclude>target/**</exclude>

            <!-- Eclipse related files -->
            <exclude>**/.project</exclude>
            <exclude>**/.settings/**</exclude>
            <exclude>**/.classpath</exclude>
            <exclude>**/.factorypath</exclude>

            <!-- IntelliJ related files -->
            <exclude>**/.idea/**</exclude>
            <exclude>**/*.iml</exclude>

            <!-- Wireshark Captures -->
            <exclude>**/*.pcap</exclude>

            <!-- Asciidoctor generated files -->
            <exclude>**/.asciidoctor/**</exclude>

            <!-- Jenkins build related files -->
            <exclude>.repository/**</exclude>
            <exclude>local-snapshots-dir/**</exclude>

            <!-- Data files created by examples running an embedded elasticsearch -->
            <exclude>elasticsearch-data/**</exclude>

            <!-- JSON doesn't like comments -->
            <exclude>**/*.json</exclude>

            <!-- Output of the profiler maven extension -->
            <exclude>**/.profiler/**</exclude>

            <!-- CLion stuff (C++ IDE) -->
            <exclude>**/cmake-build-debug/**</exclude>

            <!-- Stuff created during a plc4net build -->
            <exclude>**/obj/**</exclude>

            <!-- Temporarily exclude generated code from thrift in python modules -->
            <exclude>generated/**</exclude>

            <!-- Temporary Python virtualenv files-->
            <exclude>**/venv/**</exclude>

            <!-- Exclude a temp file needed by Docker -->
            <exclude>project_version</exclude>
          </excludes>
        </configuration>
      </plugin>

      <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>

      <!-- Generate the legally required text files in the jars -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <executions>
          <execution>
            <id>process-resource-bundles</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>process</goal>
            </goals>
            <configuration>
              <!-- TODO: For some reason the build seems to fail in conjunction with the dependency-plugin unpack goal, if enabled -->
              <skip>true</skip>
              <resourceBundles>
                <!-- Will generate META-INF/{DEPENDENCIES,LICENSE,NOTICE} -->
                <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
              </resourceBundles>
              <!-- Content in this directory will be appended to generated resources -->
              <appendedResourcesDirectory>${basedir}/src/remote-resources</appendedResourcesDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!--
        ===================================
        ==                               ==
        ==    SITE GENERATION PLUGINS    ==
        ==                               ==
        ===================================

        Starting here the following plugins are used for generating the projects website.

        Most of the complexity is due to the fact that we selected "localResouces" in the site.xml
        This causes the generated output not to rely on external resources. Therefore we have to
        manually take care of fetching and packaging these external resources with the generated site.
      -->

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>unpack</id>
            <!-- Only execute this for the parent module -->
            <inherited>false</inherited>
            <phase>pre-site</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>io.github.devacfr.maven.skins</groupId>
                  <artifactId>reflow-default-webdeps</artifactId>
                  <version>${reflow.skin.version}</version>
                  <type>jar</type>
                  <overWrite>false</overWrite>
                  <includes>
                    **/css/bootstrap.min.css,
                    **/css/fontawesome/*,
                    **/js/*.js,
                    **/js/languages/*,
                    **/js/styles/default.min.css
                  </includes>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${project.build.directory}/site</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!--
        Replace the bootstrap css with the version of the theme
      -->
      <plugin>
        <groupId>com.googlecode.maven-download-plugin</groupId>
        <artifactId>download-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>get-fontawesome</id>
            <!-- Only execute this for the parent module -->
            <inherited>false</inherited>
            <phase>pre-site</phase>
            <goals>
              <goal>wget</goal>
            </goals>
            <configuration>
              <url>https://use.fontawesome.com/releases/v${fontawesome.version}/fontawesome-free-${fontawesome.version}-web.zip</url>
              <unpack>true</unpack>
              <outputDirectory>${project.build.directory}/dependency/fontawesome</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-site-resources</id>
            <!-- Only execute this for the parent module -->
            <inherited>false</inherited>
            <phase>pre-site</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/site</outputDirectory>
              <resources>
                <resource>
                  <directory>
                    ${project.build.directory}/dependency/fontawesome/fontawesome-free-${fontawesome.version}-web
                  </directory>
                  <includes>
                    <include>css/all.min.css</include>
                  </includes>
                </resource>
                <resource>
                  <directory>
                    ${project.build.directory}/dependency/fontawesome/fontawesome-free-${fontawesome.version}-web/webfonts
                  </directory>
                  <targetPath>${project.build.directory}/site/fonts</targetPath>
                </resource>
                <resource>
                  <directory>${project.basedir}/src/site/resources-filtered</directory>
                  <filtering>true</filtering>
                  <targetPath>${project.build.directory}/site</targetPath>
                </resource>
              </resources>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!--
        The bootstrap uses "fonts" as directory for locating fonts and fontawesome uses "webfonts".
        This plugin updates the css to also use "fonts".
      -->
      <plugin>
        <groupId>com.google.code.maven-replacer-plugin</groupId>
        <artifactId>replacer</artifactId>
        <executions>
          <execution>
            <id>streamline-font-urls</id>
            <!-- Only execute this for the parent module -->
            <inherited>false</inherited>
            <phase>pre-site</phase>
            <goals>
              <goal>replace</goal>
            </goals>
            <configuration>
              <file>${project.build.directory}/site/css/all.min.css</file>
              <replacements>
                <replacement>
                  <token>../webfonts/</token>
                  <value>../fonts/</value>
                </replacement>
              </replacements>
            </configuration>
          </execution>
          <execution>
            <id>convert-property-to-adoc</id>
            <!-- Only execute this for the parent module -->
            <inherited>false</inherited>
            <phase>pre-site</phase>
            <goals>
              <goal>replace</goal>
            </goals>
            <configuration>
              <file>${project.build.directory}/pom.adoc</file>
              <replacements>
                <replacement>
                  <token>(.*)=(.*)</token>
                  <value>\:$1\: $2</value>
                </replacement>
                <replacement>
                  <token>#(.*)</token>
                  <value>// $1</value>
                </replacement>
              </replacements>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!--
        Make the maven-site-plugin stage the output in the "asf-site" branch
      -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-publish-plugin</artifactId>
        <configuration>
          <!-- mono-module doesn't require site:stage -->
          <content>${project.build.directory}/staging</content>
          <!-- branch where to deploy -->
          <scmBranch>asf-site</scmBranch>
        </configuration>
      </plugin>
    </plugins>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>0.13</version>
          <configuration>
            <!--
                Make rat output the files with missing licensed directly into the
                build output (This way we don't have to look into the rat.txt to find
                out which ones)
            -->
            <consoleOutput>true</consoleOutput>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>properties-maven-plugin</artifactId>
          <version>1.0.0</version>
        </plugin>

        <plugin>
          <groupId>org.antlr</groupId>
          <artifactId>antlr4-maven-plugin</artifactId>
          <version>${antlr.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.plc4x.plugins</groupId>
          <artifactId>plc4x-maven-plugin</artifactId>
          <version>${plc4x-code-generation.version}</version>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>buildnumber-maven-plugin</artifactId>
          <version>1.4</version>
        </plugin>

        <plugin>
          <groupId>org.codehaus.gmaven</groupId>
          <artifactId>groovy-maven-plugin</artifactId>
          <version>2.1.1</version>
        </plugin>

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

        <plugin>
          <groupId>com.google.code.maven-replacer-plugin</groupId>
          <artifactId>replacer</artifactId>
          <version>1.5.3</version>
        </plugin>

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

        <plugin>
          <groupId>com.googlecode.maven-download-plugin</groupId>
          <artifactId>download-maven-plugin</artifactId>
          <version>1.4.2</version>
        </plugin>

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

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
            <testSource>${java.version}</testSource>
            <testTarget>${java.version}</testTarget>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.2</version>
          <dependencies>
            <dependency>
              <groupId>org.junit.jupiter</groupId>
              <artifactId>junit-jupiter-engine</artifactId>
              <version>${junit.jupiter.version}</version>
            </dependency>
          </dependencies>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>2.22.2</version>
          <dependencies>
            <dependency>
              <groupId>org.junit.platform</groupId>
              <artifactId>junit-platform-surefire-provider</artifactId>
              <version>${junit.platform.version}</version>
            </dependency>
            <dependency>
              <groupId>org.junit.jupiter</groupId>
              <artifactId>junit-jupiter-engine</artifactId>
              <version>${junit.jupiter.version}</version>
            </dependency>
          </dependencies>
        </plugin>

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

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.2.0</version>
          <executions>
            <execution>
              <id>attach-sources</id>
              <phase>verify</phase>
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.2.0</version>
          <configuration>
            <finalName>apache-plc4x-${project.version}</finalName>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>3.2.1</version>
          <configuration>
            <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-uber-jar.${project.packaging}</outputFile>
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
            </transformers>
            <filters>
              <filter>
                <!--
                  These files contain signatures for classes, omit them as in
                  shaded archives this has cause quite some problems in the past.
                -->
                <artifact>*:*</artifact>
                <excludes>
                  <exclude>META-INF/*.SF</exclude>
                  <exclude>META-INF/*.DSA</exclude>
                  <exclude>META-INF/*.RSA</exclude>
                </excludes>
              </filter>
            </filters>
            <dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
          </configuration>
        </plugin>

        <!-- Configure the Site generation -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.8.2</version>
          <configuration>
            <!--templateFile>${session.executionRootDirectory}/src/site/template/site.vm</templateFile-->
            <generateReports>true</generateReports>
            <generateSitemap>true</generateSitemap>
            <relativizeDecorationLinks>false</relativizeDecorationLinks>
            <locales>en</locales>
            <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
            <outputEncoding>${project.reporting.outputencoding}</outputEncoding>
            <!--
              IntelliJ can't find the asciidoc config option in the site plugin, which is correct.
              However this config section is used by the asciidoctor site plugin extension. So plead
              ignore this error, it's actually ok.
            -->
            <asciidoc>
              <attributes>
                <source-highlighter>prettify</source-highlighter>
                <imagesoutdir>${project.build.directory}/site/images</imagesoutdir>
                <pom-adoc>${project.build.directory}/pom.adoc</pom-adoc>
              </attributes>
              <requires>
                <require>asciidoctor-diagram</require>
              </requires>
            </asciidoc>
          </configuration>
          <dependencies>
            <!-- All dependencies needed by the reflow skin -->
            <dependency>
              <groupId>io.github.devacfr.maven.skins</groupId>
              <artifactId>reflow-velocity-tools</artifactId>
              <version>${reflow.skin.version}</version>
            </dependency>

            <!-- add support for scm/git site deployment -->
            <dependency>
              <groupId>org.apache.maven.wagon</groupId>
              <artifactId>wagon-scm</artifactId>
              <version>2.12</version>
            </dependency>
            <dependency>
              <groupId>org.apache.maven.scm</groupId>
              <artifactId>maven-scm-api</artifactId>
              <version>1.9.5</version>
            </dependency>
            <dependency>
              <groupId>org.apache.maven.scm</groupId>
              <artifactId>maven-scm-manager-plexus</artifactId>
              <version>1.9.5</version>
            </dependency>
            <dependency>
              <groupId>org.apache.maven.scm</groupId>
              <artifactId>maven-scm-provider-gitexe</artifactId>
              <version>1.9.5</version>
            </dependency>

            <!-- Add support for asciidoctor -->
            <dependency>
              <groupId>org.asciidoctor</groupId>
              <artifactId>asciidoctor-maven-plugin</artifactId>
              <version>${asciidoctor.maven.plugin.version}</version>
            </dependency>
            <dependency>
              <groupId>org.asciidoctor</groupId>
              <artifactId>asciidoctorj</artifactId>
              <version>${asciidoctorj.version}</version>
            </dependency>
            <dependency>
              <groupId>org.asciidoctor</groupId>
              <artifactId>asciidoctorj-diagram</artifactId>
              <version>${asciidoctorj.diagram.version}</version>
            </dependency>
          </dependencies>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.1.1</version>
          <configuration>
            <!--
              This will suppress the generation of a hidden timestamp at the top of each generated html page
              and hopefully let the site generation nod to too big updates every time.
            -->
            <notimestamp>true</notimestamp>
            <!--
              Set the source level to 8 as otherwise with newer JDKs we're getting trouble.
            -->
            <source>8</source>
            <!--
              Disable the detection of links as we have some artifacts without api-docs and
              the errors were polluting the build output.
            -->
            <detectLinks>false</detectLinks>
            <validateLinks>false</validateLinks>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-changelog-plugin</artifactId>
          <version>2.3</version>
        </plugin>

        <plugin>
          <groupId>com.buschmais.jqassistant</groupId>
          <artifactId>jqassistant-maven-plugin</artifactId>
          <version>1.6.0</version>
        </plugin>

        <plugin>
          <groupId>org.owasp</groupId>
          <artifactId>dependency-check-maven</artifactId>
          <version>${owasp-dependency-check.version}</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <reporting>
    <plugins>
      <!-- Generate the unit- and integration-test reports -->
      <!--plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>report-only</report>
              <report>failsafe-report-only</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin-->

      <!-- Generate a code coverage report -->
      <!--plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>report</report>
              <report>report-integration</report>
            </reports>
          </reportSet>
          <reportSet>
            <id>aggregate</id>
            <inherited>false</inherited>
            <reports>
              <report>report-aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin-->

      <!-- Add html friendly version of source files with line-numbers -->
      <!--plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <version>3.0.0</version>
      </plugin-->

      <!-- Generate javadoc documentation -->
      <!--plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>javadoc-no-fork</report>
              <report>test-javadoc-no-fork</report>
            </reports>
          </reportSet>
        </reportSets>
        <configuration>
          <failOnError>true</failOnError>
        </configuration>
      </plugin-->

      <!-- Generates a changelog report from GIT commits -->
      <!--plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changelog-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>changelog</report>
              <report>file-activity</report>
            </reports>
          </reportSet>
        </reportSets>
        <configuration>
          <!- Automatically link Jira issues ->
          <issueLinkUrl>https://issues.apache.org/jira/browse/%ISSUE%</issueLinkUrl>
        </configuration>
      </plugin-->

      <!-- Generates a dependency vulnerability -->
      <!--plugin>
        <groupId>org.owasp</groupId>
        <artifactId>dependency-check-maven</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin-->
    </plugins>
  </reporting>

  <!-- Make Snapshots of Apache projects available -->
  <repositories>
    <repository>
      <id>apache-snapshots</id>
      <url>https://repository.apache.org/content/repositories/snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <!-- Make Snapshots of Apache plugins available -->
  <pluginRepositories>
    <pluginRepository>
      <id>apache-snapshots</id>
      <url>https://repository.apache.org/content/repositories/snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>

  <profiles>
    <!-- Allows skipping of the pre-flight-check as needed when deploying on jenkins -->
    <profile>
      <id>skip-prerequisite-check</id>
      <activation>
      </activation>
      <build>
        <plugins>
          <!-- Make some additional properties available to simplify keeping some content up to date -->
          <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>groovy-maven-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
              <!-- Do some pre-build checks and report any findings to the user -->
              <execution>
                <id>prerequisite-check</id>
                <phase>validate</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <inherited>false</inherited>
                <configuration>
                  <source>
                    print "\nSkipping prerequisite-check\n\n"
                  </source>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Build PLC4X including the Sandbox modules -->
    <profile>
      <id>with-sandbox</id>
      <modules>
        <module>sandbox</module>
      </modules>
    </profile>

    <!-- Profile for linux (Self-Enabling) -->
    <profile>
      <id>os-unix</id>
      <activation>
        <os>
          <family>unix</family>
        </os>
      </activation>
      <properties>
        <os.suffix>linux</os.suffix>
        <os.classifier>linux-x86_64</os.classifier>
        <cmake.url>https://github.com/Kitware/CMake/releases/download/v${cmake-version}/cmake-${cmake-version}-Linux-x86_64.tar.gz</cmake.url>
        <cmake.root-dir>${project.build.directory}/cmake-${cmake-version}-Linux-x86_64</cmake.root-dir>
        <cmake.child-dir>bin/cmake</cmake.child-dir>
        <cmake.generator>Unix Makefiles</cmake.generator>
        <boost.url>https://dl.bintray.com/boostorg/release/${boost.version}/source/boost_${boost.version.underline}.tar.gz</boost.url>
        <boost.bootstrap.executable>./bootstrap.sh</boost.bootstrap.executable>
        <boost.build.executable>./b2</boost.build.executable>
        <thrift.bootstrap.executable>./bootstrap.sh</thrift.bootstrap.executable>
        <thrift.configure.executable>./configure</thrift.configure.executable>
        <thrift.make.executable>make</thrift.make.executable>
        <thrift.compiler.executable>thrift</thrift.compiler.executable>
        <gradlew.executable>./gradlew</gradlew.executable>
      </properties>
    </profile>
    <!-- Profile for mac (Self-Enabling) -->
    <profile>
      <id>os-mac</id>
      <activation>
        <os>
          <family>mac</family>
        </os>
      </activation>
      <properties>
        <os.suffix>mac</os.suffix>
        <os.classifier>mac-x86_64</os.classifier>
        <cmake.url>https://github.com/Kitware/CMake/releases/download/v${cmake-version}/cmake-${cmake-version}-Darwin-x86_64.tar.gz</cmake.url>
        <cmake.root-dir>${project.build.directory}/cmake-${cmake-version}-Darwin-x86_64</cmake.root-dir>
        <cmake.child-dir>CMake.app/Contents/BIN/cmake</cmake.child-dir>
        <cmake.generator>Unix Makefiles</cmake.generator>
        <boost.url>https://dl.bintray.com/boostorg/release/${boost.version}/source/boost_${boost.version.underline}.tar.gz</boost.url>
        <boost.bootstrap.executable>./bootstrap.sh</boost.bootstrap.executable>
        <boost.build.executable>./b2</boost.build.executable>
        <thrift.bootstrap.executable>./bootstrap.sh</thrift.bootstrap.executable>
        <thrift.configure.executable>./configure</thrift.configure.executable>
        <thrift.make.executable>make</thrift.make.executable>
        <thrift.compiler.executable>thrift</thrift.compiler.executable>
        <gradlew.executable>./gradlew</gradlew.executable>
      </properties>
    </profile>
    <!-- profile for windows (Self-Enabling) -->
    <profile>
      <id>os-windows</id>
      <activation>
        <os>
          <family>windows</family>
        </os>
      </activation>
      <properties>
        <os.suffix>win</os.suffix>
        <os.classifier>windows-x86_64</os.classifier>
        <cmake.url>https://github.com/Kitware/CMake/releases/download/v${cmake-version}/cmake-${cmake-version}-win64-x64.zip</cmake.url>
        <cmake.root-dir>${project.build.directory}/cmake-${cmake-version}-win64-x64</cmake.root-dir>
        <cmake.child-dir>bin/cmake.exe</cmake.child-dir>
        <cmake.generator>MinGW Makefiles</cmake.generator>
        <boost.url>https://dl.bintray.com/boostorg/release/${boost.version}/source/boost_${boost.version.underline}.zip</boost.url>
        <boost.bootstrap.executable>bootstrap.bat</boost.bootstrap.executable>
        <boost.build.executable>b2</boost.build.executable>
        <boost.include-directory>libs/libs/boost/include/boost-${boost.version.underline-short}</boost.include-directory>
        <thrift.bootstrap.executable>bootstrap.sh</thrift.bootstrap.executable>
        <thrift.configure.executable>configure</thrift.configure.executable>
        <thrift.make.executable>make</thrift.make.executable>
        <thrift.compiler.executable>thrift.exe</thrift.compiler.executable>
        <gradlew.executable>gradlew.bat</gradlew.executable>
      </properties>
    </profile>

    <!--
      This profile is intended to help when having problems with Maven.
      When enabled, it automatically generates an "effective.pom" in the target directory.
      This version is the fully expanded version where all inherited configuration is in
      place and all variables are resolved and profile configuration is included.
    -->
    <profile>
      <id>debug-pom</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-help-plugin</artifactId>
            <executions>
              <execution>
                <id>generate-effective-pom</id>
                <phase>compile</phase>
                <goals>
                  <goal>effective-pom</goal>
                </goals>
                <configuration>
                  <output>${project.build.directory}/effective.pom</output>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!--
      This profile adds some additional configuration that should only be applied when running on jenkins.
    -->
    <profile>
      <id>jenkins-build</id>
    </profile>

    <!--
      This profile adds some additional checks and settings that should apply during development,
      but could cause problems after that. As an example it would be impossible to build a released
      version, if after the release CVEs were reported for one of its dependencies.
    -->
    <profile>
      <id>development</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>3.0.0-M2</version> <!--$NO-MVN-MAN-VER$-->
            <executions>
              <execution>
                <id>check-at-least-java-8</id>
                <phase>validate</phase>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireJavaVersion>
                      <version>1.8.0</version>
                    </requireJavaVersion>
                  </rules>
                </configuration>
              </execution>
              <!-- Ensure we're not mixing dependency versions -->
              <execution>
                <id>enforce-version-convergence</id>
                <phase>validate</phase>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <dependencyConvergence />
                  </rules>
                </configuration>
              </execution>
              <!--
                  Fails the build if classes are included from multiple
                  artifacts and these are not identical.
              -->
              <execution>
                <id>enforce-ban-duplicate-classes</id>
                <phase>validate</phase>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <banDuplicateClasses>
                      <scopes>
                        <scope>compile</scope>
                        <scope>provided</scope>
                      </scopes>
                      <findAllDuplicates>true</findAllDuplicates>
                      <ignoreWhenIdentical>true</ignoreWhenIdentical>
                    </banDuplicateClasses>
                  </rules>
                  <fail>true</fail>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>extra-enforcer-rules</artifactId>
                <version>1.2</version>
              </dependency>
            </dependencies>
          </plugin>

          <!--plugin>
            <groupId>org.owasp</groupId>
            <artifactId>dependency-check-maven</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <failBuildOnCVSS>8</failBuildOnCVSS>
            </configuration>
          </plugin-->
        </plugins>
      </build>
    </profile>

    <profile>
      <id>with-jqassistant</id>
      <build>
        <plugins>
          <!-- Plugin for analysing the project based on neo4j queries -->
          <plugin>
            <groupId>com.buschmais.jqassistant</groupId>
            <artifactId>jqassistant-maven-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>scan</goal>
                  <goal>analyze</goal>
                </goals>
                <configuration>
                  <rulesDirectory>${project.basedir}/src/jqassistant</rulesDirectory>
                  <failOnSeverity>MAJOR</failOnSeverity>
                  <warnOnSeverity>MINOR</warnOnSeverity>
                  <scanIncludes>
                    <scanInclude>
                      <path>${project.basedir}/.git</path>
                    </scanInclude>
                  </scanIncludes>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      <reporting>
        <plugins>
          <plugin>
            <groupId>com.buschmais.jqassistant</groupId>
            <artifactId>jqassistant-maven-plugin</artifactId>
            <reportSets>
              <reportSet>
                <reports>
                  <report>report</report>
                </reports>
              </reportSet>
            </reportSets>
          </plugin>
        </plugins>
      </reporting>
    </profile>

    <!--
      Self enabling fake-plugin configuration to help Eclipse use Maven right
    -->
    <profile>
      <id>only-eclipse</id>
      <activation>
        <property>
          <name>m2e.version</name>
        </property>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <!--
              This is a fake plugin which is used to tell m2e (Eclipse) how
              to process this maven project.
            -->
            <plugin>
              <groupId>org.eclipse.m2e</groupId>
              <artifactId>lifecycle-mapping</artifactId>
              <version>1.0.0</version>
              <configuration>
                <lifecycleMappingMetadata>
                  <pluginExecutions>
                    <pluginExecution>
                      <pluginExecutionFilter>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-remote-resources-plugin</artifactId>
                        <versionRange>[1.0.0,)</versionRange>
                        <goals>
                          <goal>process</goal>
                        </goals>
                      </pluginExecutionFilter>
                      <action>
                        <ignore />
                      </action>
                    </pluginExecution>
                  </pluginExecutions>
                </lifecycleMappingMetadata>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

    <!--
      This profile extends the default "apache-release" configuration with automatic checksum-
      generation for the release source artifact. It is automatically activated during the
      release build and only needed there.
    -->
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <!--
            Create MD5 and SHA512 checksum files for the release artifacts.
          -->
          <plugin>
            <groupId>net.nicoulaj.maven.plugins</groupId>
            <artifactId>checksum-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
              <execution>
                <goals>
                  <goal>files</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <algorithms>
                <algorithm>SHA-512</algorithm>
              </algorithms>
              <fileSets>
                <fileSet>
                  <directory>${project.build.directory}</directory>
                  <includes>
                    <include>apache-plc4x-${project.version}-source-release.zip</include>
                  </includes>
                </fileSet>
              </fileSets>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
