<?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>23</version>
  </parent>

  <groupId>org.apache.plc4x</groupId>
  <artifactId>plc4x-parent</artifactId>
  <version>0.8.0-SNAPSHOT</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>HEAD</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>2020-05-15T10:51:17Z</project.build.outputTimestamp>

    <!-- Exclude all generated code -->
    <sonar.exclusions>**/generated-sources</sonar.exclusions>

    <plc4x-code-generation.version>1.3.0-SNAPSHOT</plc4x-code-generation.version>

    <antlr.version>4.8</antlr.version>
    <apiguardian.version>1.1.0</apiguardian.version>
    <asm.version>5.0.4</asm.version>
    <assertj.version>3.11.1</assertj.version>
    <bouncycastle.version>1.60</bouncycastle.version>
    <boost.version>1.73.0</boost.version>
    <boost.version.underline-short>1_73</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 3.17.0 is already released, but we should keep it in sync with the cmake-maven-plugin -->
    <cmake-version>3.17.3</cmake-version>
    <commons-beanutils.version>1.9.4</commons-beanutils.version>
    <commons-cli.version>1.4</commons-cli.version>
    <commons-codec.version>1.12</commons-codec.version>
    <commons-collections4.version>4.1</commons-collections4.version>
    <commons-configuration2.version>2.7</commons-configuration2.version>
    <commons-io.version>2.6</commons-io.version>
    <commons-lang.version>2.6</commons-lang.version>
    <commons-lang3.version>3.9</commons-lang3.version>
    <commons-logging.version>1.2</commons-logging.version>
    <commons-math3.version>3.6.1</commons-math3.version>
    <commons-pool2.version>2.8.0</commons-pool2.version>
    <commons-text.version>1.8</commons-text.version>
    <crc.version>1.0.1</crc.version>
    <elasticsearch.version>7.5.2</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>3.0.2</groovy.version>
    <gson.version>2.8.5</gson.version>
    <guava.version>27.0.1-jre</guava.version>
    <hamcrest.version>2.2</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.6.0</junit.jupiter.version>
    <junit.platform.version>1.6.0</junit.platform.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.3.0</lucene.version>
    <metrics-core.version>3.1.2</metrics-core.version>
    <mockito.version>2.24.5</mockito.version>
    <netty.version>4.1.47.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.24</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>
  </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-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>${commons-beanutils.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>${commons-cli.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>${commons-codec.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.19</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-csv</artifactId>
        <version>1.7</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>io.vavr</groupId>
        <artifactId>vavr</artifactId>
        <version>0.10.2</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>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.apiguardian</groupId>
        <artifactId>apiguardian-api</artifactId>
        <version>${apiguardian.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</artifactId>
        <version>${hamcrest.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</artifactId>
        <version>${junit.jupiter.version}</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.platform</groupId>
        <artifactId>junit-platform-engine</artifactId>
        <version>${junit.platform.version}</version>
      </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 and
            generate an 'pom.adoc' file containing them in a format asciidoc can use.
          -->
          <execution>
            <id>provide-custom-properties</id>
            <phase>pre-site</phase>
            <goals>
              <goal>execute</goal>
            </goals>
            <configuration>
              <source>${project.basedir}/src/main/script/preSiteGeneration.groovy</source>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.5</version>
          </dependency>
        </dependencies>
      </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>
            <exclude>**/cmake-*/**</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>

            <!-- JEVN local version files -->
            <exclude>**/.java-version</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.

      -->

      <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.basedir}/src/site/resources-filtered</directory>
                  <filtering>true</filtering>
                  <targetPath>${project.build.directory}/site</targetPath>
                </resource>
              </resources>
            </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>org.apache.karaf.tooling</groupId>
          <artifactId>karaf-maven-plugin</artifactId>
          <version>4.2.8</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.5.0</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>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>2.22.2</version>
        </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.3</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>
            <!-- 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>
            <failOnWarnings>false</failOnWarnings>
            <failOnError>false</failOnError>
          </configuration>
        </plugin>

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

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

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>1.6.0</version>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>

        <plugin>
          <groupId>org.apache.thrift.tools</groupId>
          <artifactId>maven-thrift-plugin</artifactId>
          <version>0.1.11</version>
        </plugin>

        <plugin>
          <groupId>com.googlecode.cmake-maven-project</groupId>
          <artifactId>cmake-maven-plugin</artifactId>
          <version>3.17.3-b1</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <configuration>
            <!-- Tell the plugin to always release all modules using the same version -->
            <autoVersionSubmodules>true</autoVersionSubmodules>
            <!-- Set the line separator to the unix style separator (Needed for reproducible builds -->
            <!-- TODO: try to find out why antlr doesn't like the line.separator setting -->
            <!--arguments>-Papache-release -Dline.separator='\n' ${arguments}</arguments-->
            <arguments>-Papache-release ${arguments}</arguments>
          </configuration>
        </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>${project.build.directory}/cmake-${cmake-version}-Linux-x86_64/bin/</cmake.root>
        <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>${project.build.directory}/cmake-${cmake-version}-Darwin-x86_64/CMake.app/Contents/bin</cmake.root>
        <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>${project.build.directory}/cmake-${cmake-version}-win64-x64/bin</cmake.root>
        <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>

    <!--
      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>
              <includeRelativePath>true</includeRelativePath>
              <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>
