<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>
    <groupId>com.pi4j</groupId>
    <artifactId>pi4j-parent</artifactId>
    <version>3.0.2</version>
    <name>Pi4J :: Parent POM</name>
    <description>Parent Maven POM for the Pi4J Project</description>
    <url>https://pi4j.com</url>
    <inceptionYear>2012</inceptionYear>
    <packaging>pom</packaging>

    <!-- ORGANIZATION -->
    <organization>
        <name>Pi4J</name>
        <url>https://pi4j.com</url>
    </organization>

    <!-- LICENSE -->
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
            <comments>A business-friendly OSS license</comments>
        </license>
    </licenses>

    <!-- DEVELOPERS/CONTRIBUTORS -->
    <developers>
        <developer>
            <name>Robert Savage</name>
            <email>robert@pi4j.com</email>
            <url>http://robertsavage.me</url>
            <organization>Savage Software</organization>
            <organizationUrl>http://savagesoftware.com</organizationUrl>
            <properties>
                <blog>http://savagehomeautomation.com</blog>
                <linikedin>https://www.linkedin.com/in/robert-savage</linikedin>
                <twitter>https://twitter.com/savageautomate</twitter>
            </properties>
            <roles>
                <role>sponsor</role>
                <role>architect</role>
                <role>developer</role>
            </roles>
        </developer>
        <developer>
            <name>Daniel Sendula</name>
            <email>daniel@pi4j.com</email>
            <roles>
                <role>developer</role>
            </roles>
        </developer>
        <developer>
            <name>Frank Delporte</name>
            <email>frank@pi4j.com</email>
            <url>https://webtechie.be</url>
            <properties>
                <blog>https://webtechie.be</blog>
                <linkedin>https://www.linkedin.com/in/frankdelporte/</linkedin>
                <mastodon>https://foojay.social/@frankdelporte</mastodon>
                <bluesky>https://bsky.app/profile/frankdelporte.be</bluesky>
            </properties>
            <roles>
                <role>facilitator</role>
                <role>developer</role>
            </roles>
            <timezone>+1</timezone>
        </developer>
        <developer>
            <id>eitch</id>
            <name>Robert von Burg</name>
            <email>eitch@eitchnet.ch</email>
            <url>http://strolch.li</url>
            <roles>
                <role>developer</role>
            </roles>
            <timezone>+1</timezone>
        </developer>
        <developer>
            <id>alex9849</id>
            <name>Alexander Liggesmeyer</name>
            <url>https://alexander.liggesmeyer.net/</url>
            <roles>
                <role>developer</role>
            </roles>
            <timezone>+1</timezone>
        </developer>
        <developer>
            <id>taartspi</id>
            <name>Tom Aarts</name>
            <roles>
                <role>developer</role>
            </roles>
        </developer>
    </developers>

    <contributors>
        <contributor>
            <name>Marcus Hirt</name>
            <url>http://hirt.se/</url>
            <organization>Robo4J</organization>
            <organizationUrl>http://www.robo4j.io</organizationUrl>
            <properties>
                <linkedin>https://www.linkedin.com/in/mhirt</linkedin>
                <twitter>https://twitter.com/hirt</twitter>
            </properties>
        </contributor>
        <contributor>
            <name>Miroslav Wengner</name>
            <url>http://www.wengnermiro.com/</url>
            <organization>Robo4J</organization>
            <organizationUrl>http://www.robo4j.io</organizationUrl>
            <properties>
                <linkedin>https://www.linkedin.com/in/mwengner</linkedin>
                <twitter>https://twitter.com/miragemiko</twitter>
            </properties>
        </contributor>
    </contributors>

    <!-- SOURCE CONTROL -->
    <scm>
        <developerConnection>scm:git:ssh://git@github.com/Pi4J/pi4j.git</developerConnection>
        <connection>scm:git:ssh://git@github.com/Pi4J/pi4j.git</connection>
        <url>https://github.com/Pi4J/pi4j.git</url>
    </scm>

    <!-- ISSUE MANAGEMENT -->
    <issueManagement>
        <url>https://github.com/Pi4J/pi4j/issues</url>
        <system>github</system>
    </issueManagement>

    <!-- DISTRIBUTION REPOSITORIES -->
    <distributionManagement>
        <downloadUrl>https://pi4j.com/download</downloadUrl>
        <repository>
            <id>sonatype-oss-staging</id>
            <name>Sonatype Open Source Maven Repository</name>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
        </repository>
        <snapshotRepository>
            <id>sonatype-oss-snapshots</id>
            <name>Sonatype Open Source Maven Snapshots Repository</name>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

    <!-- DEPENDENCY REPOSITORIES -->
    <repositories>
        <repository>
            <id>oss-snapshots-repo</id>
            <name>Sonatype OSS Maven Repository</name>
            <url>https://oss.sonatype.org/content/groups/public</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <!-- PROJECT MODULES -->
    <modules>
        <!-- THE FOLLOWING ARE THE Pi4J MODULES -->
        <module>libraries/pi4j-library</module>
        <module>pi4j-core</module>
        <module>plugins/pi4j-plugin</module>
        <module>pi4j-test</module>
        <module>pi4j-distribution</module>
    </modules>

    <!-- BUILD PROPERTIES -->
    <properties>
        <!-- =================================================================== -->
        <!-- SELECT THE PROPER COMPILER OPTION FOR THE NATIVE LIBRARY BUILDS     -->
        <!-- The supported options are:                                          -->
        <!--    "CROSS-COMPILER"  for cross-compiling on your host with a cross  -->
        <!--                      compiler environment setup for 64-bit (aarch64)-->
        <!--                      and 32-bit (armhf) platforms.  The host must   -->
        <!--                      be a Linux-based system with an Intel/AMD or   -->
        <!--                      ARM 64-bit CPU and Operating System.  The host -->
        <!--                      can be a RaspberryPi 3B or 4B that is running  -->
        <!--                      Pi OS 64-bit. (Unable to cross-compile for     -->
        <!--                      64-bit library on 32-bit only hosts.)          -->
        <!--                      [THIS IS THE DEFAULT IF NOT SPECIFIED]         -->
        <!--                                                                     -->
        <!--    "DOCKER-COMPILER" for cross-compiling inside a Docker container  -->
        <!--                      best option when compiling on MacOS or Windows -->
        <!--                      This option is also suitable for a Linux-based -->
        <!--                      system where you would prefer not to install   -->
        <!--                      ARM-based cross-compilers and other build      -->
        <!--                      environment requirements like Java/JDK and     -->
        <!--                      Maven.  This open only requires that you have  -->
        <!--                      Docker (https://www.docker.com/) or Docker     -->
        <!--                      Desktop installed and running on a 64-bit      -->
        <!--                      Intel/AMD or ARM host system.                  -->
        <!--                                                                     -->
        <!-- (Note: you should override these options in a custom active profile -->
        <!--        in your local M2 settings.xml file or use one of the         -->
        <!--        associated profiles with the '-P' flag.  -->
        <!-- =================================================================== -->

        <!-- YOU CAN DEFINE ONE OF THE FOLLOWING YOU A CUSTOM ACTIVE PROFILE
             IN YOU ~/.m2/settings.xml file TO PERMANENTLY APPLY THE DESIRED
             COMPILER BEHAVIOR -->
        <!-- <pi4j.native.compiler>CROSS-COMPILER</pi4j.native.compiler> -->
        <!-- <pi4j.native.compiler>DOCKER-COMPILER</pi4j.native.compiler> -->

        <!-- OR YOU CAN DEFINE THE PROPERTY VALUE USING THE '-D' FLAG ON YOUR MAVEN COMMAND -->
        <!-- i.e.:   mvn clean install -Pnative -Dpi4j.native.compiler=CROSS-COMPILER -->
        <!-- i.e.:   mvn clean install -Pnative -Dpi4j.native.compiler=DOCKER-COMPILER -->

        <!-- OR YOU CAN DEFINE THE ASSOCIATED PROFILE VALUE USING THE '-P' FLAG ON YOUR MAVEN COMMAND -->
        <!-- i.e.:   mvn clean install -Pnative -Pcross-compile -->
        <!-- i.e.:   mvn clean install -Pnative -Pdocker -->

        <!-- used internally; do not change value here -->
        <!-- BY DEFAULT, ENABLE THE 'CROSS-COMPILER' FOR NATIVE BUILDS -->
        <pi4j.native.compiler.effective>CROSS-COMPILER</pi4j.native.compiler.effective>

        <!-- DEFAULT SETTINGS FOR REMOTELY BUILDING NATIVE LIBRARY ON A REMOTE PLATFORM -->
        <pi4j.default.host>192.168.1.1</pi4j.default.host>
        <pi4j.default.port>22</pi4j.default.port>
        <pi4j.default.user>pi</pi4j.default.user>
        <pi4j.default.password>raspberry</pi4j.default.password>
        <pi4j.default.directory>pi4j-temp</pi4j.default.directory>

        <!-- SETTINGS FOR COPYING Pi4J ARTIFACTS TO DEVELOPMENT DEVICE/PLATFORM -->
        <pi4j.dev.transfer>false</pi4j.dev.transfer>
        <pi4j.dev.host>${pi4j.default.host}</pi4j.dev.host>
        <pi4j.dev.port>${pi4j.default.port}</pi4j.dev.port>
        <pi4j.dev.user>${pi4j.default.user}</pi4j.dev.user>
        <pi4j.dev.password>${pi4j.default.password}</pi4j.dev.password>
        <pi4j.dev.directory>pi4j-dev</pi4j.dev.directory>

        <pi4j.test.pigpio.host>${pi4j.default.host}</pi4j.test.pigpio.host>
        <pi4j.test.pigpio.port>8888</pi4j.test.pigpio.port>

        <!-- SETTING FOR ARDUINO TEST HARNESS HARDWARE TESTING -->
        <!-- (you will need to override these in your "~/.m2/settings.xml" for your own development) -->
        <pi4j.test.harness.enabled>false</pi4j.test.harness.enabled>
        <pi4j.test.harness.port>tty.usbmodem142301</pi4j.test.harness.port>

        <!-- DEFAULT Pi4J BUILD PROPERTIES FOR THE 'RaspberryPi' PLATFORM -->
        <!--<raspberrypi.build>false</raspberrypi.build>-->
        <!--<raspberrypi.platform>raspberrypi</raspberrypi.platform>-->
        <!--<raspberrypi.name>RaspberryPi</raspberrypi.name>-->
        <!--<raspberrypi.host>${pi4j.default.host}</raspberrypi.host>-->
        <!--<raspberrypi.port>${pi4j.default.port}</raspberrypi.port>-->
        <!--<raspberrypi.user>${pi4j.default.user}</raspberrypi.user>-->
        <!--<raspberrypi.password>${pi4j.default.password}</raspberrypi.password>-->
        <!--<raspberrypi.directory>${pi4j.default.directory}</raspberrypi.directory>-->

        <!-- PROJECT ENCODING PROPERTIES -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- JAVA COMPILER VERSIONS -->
        <java.version>21</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>

        <!-- DEPENDENCY VERSIONS -->
        <!--
        It seems we are stuck at this version of ant-contrib. Bumping it leads to:
        Error executing Ant tasks: 'org.apache.tools.ant.util.FileUtils
        org.apache.tools.ant.util.FileUtils.getFileUtils()
        -->
        <ant-contrib.version>20020829</ant-contrib.version>
        <ant-jsch.version>1.10.15</ant-jsch.version>
        <jna.version>5.16.0</jna.version>
        <jsch.version>0.1.55</jsch.version>
        <junit.jupiter.version>5.11.3</junit.jupiter.version>
        <slf4j.version>2.0.12</slf4j.version>
        <jserialcomm.version>2.11.0</jserialcomm.version>
        <jna.version>5.15.0</jna.version>

        <!-- PLUGIN VERSIONS -->
        <build-helper-maven-plugin.version>3.6.0</build-helper-maven-plugin.version>
        <exec-maven-plugin.version>3.5.0</exec-maven-plugin.version>
        <jdeb.version>1.8</jdeb.version>
        <lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
        <maven-antrun-plugin.version>3.1.0</maven-antrun-plugin.version>
        <maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
        <maven-bundle-plugin.version>5.1.9</maven-bundle-plugin.version>
        <maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
        <maven-checkstyle-plugin.version>3.6.0</maven-checkstyle-plugin.version>
        <maven-dependency-plugin.version>3.8.1</maven-dependency-plugin.version>
        <maven-gpg-plugin.version>3.2.1</maven-gpg-plugin.version>
        <maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
        <maven-javadoc-plugin.version>3.11.1</maven-javadoc-plugin.version>
        <maven-release-plugin.version>3.1.1</maven-release-plugin.version>
        <maven-resource-plugin.version>3.3.1</maven-resource-plugin.version>
        <maven-scm-plugin.version>2.1.0</maven-scm-plugin.version>
        <maven-site-plugin.version>3.21.0</maven-site-plugin.version>
        <maven-source-plugin.version>3.3.1</maven-source-plugin.version>
        <maven-surefire-plugin.version>3.5.2</maven-surefire-plugin.version>
        <native-maven-plugin.version>1.0-alpha-9</native-maven-plugin.version>
        <nexus-staging-maven-plugin.version>1.7.0</nexus-staging-maven-plugin.version>

        <!-- REPORTS VERSIONS -->
        <maven-project-info-reports-plugin.version>3.5.0</maven-project-info-reports-plugin.version>

        <!-- SPECIAL ACCESS PROPERTIES -->
        <!-- These are only used by project committer/publisher -->
        <pi4j.aws.access.key></pi4j.aws.access.key>
        <pi4j.aws.secret.key></pi4j.aws.secret.key>
        <pi4j.gpg.sign>false</pi4j.gpg.sign>
        <pi4j.gpg.key></pi4j.gpg.key>
        <pi4j.gpg.keyring></pi4j.gpg.keyring>
        <pi4j.gpg.passphrase></pi4j.gpg.passphrase>
        <gpg.keyname>${pi4j.gpg.key}</gpg.keyname>

        <!-- Project Properties -->
        <launcher.class>com.pi4j.test/com.pi4j.test.GpiodTest</launcher.class>
        <launcher.args></launcher.args>
        <!-- <launcher.args>ButtonApp</launcher.args>  -->

        <!-- Raspberry Pi Setup -->
        <raspberrypi.ipnumber>cocktailpi.local</raspberrypi.ipnumber>
        <raspberrypi.port>22</raspberrypi.port>
        <raspberrypi.username>pi</raspberrypi.username>
        <raspberrypi.password>raspberry</raspberrypi.password>
        <raspberrypi.deploydirectory>/home/pi/deploy</raspberrypi.deploydirectory>
        <raspberrypi.jvmOptions/>
    </properties>

    <!-- PROJECT DEPENDENCIES -->
    <dependencyManagement>
        <dependencies>
            <!-- ANT/TASKING DEPENDENCIES -->
            <dependency>
                <groupId>org.apache.ant</groupId>
                <artifactId>ant-jsch</artifactId>
                <version>${ant-jsch.version}</version>
            </dependency>
            <dependency>
                <groupId>com.jcraft</groupId>
                <artifactId>jsch</artifactId>
                <version>${jsch.version}</version>
            </dependency>
            <dependency>
                <groupId>ant-contrib</groupId>
                <artifactId>ant-contrib</artifactId>
                <version>${ant-contrib.version}</version>
            </dependency>

            <!-- LOGGING DEPENDENCIES -->
            <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>

            <!-- UNIT TESTING DEPENDENCIES -->
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${junit.jupiter.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
                <version>${junit.jupiter.version}</version>
                <scope>test</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <!-- GLOBAL DEPENDENCIES -->
    <dependencies>

        <!-- LOGGER DEPENDENCIES -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- TEST DEPENDENCIES -->
        <dependency>
            <groupId>com.fazecast</groupId>
            <artifactId>jSerialComm</artifactId>
            <version>${jserialcomm.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <!-- BUILD INSTRUCTIONS -->
    <build>

        <!-- GLOBAL PROJECT RESOURCES -->
        <resources>
            <resource>
                <directory>${basedir}</directory>
                <filtering>false</filtering>
                <includes>
                    <include>LICENSE.txt</include>
                    <include>NOTICE.txt</include>
                    <include>README.md</include>
                </includes>
            </resource>
        </resources>

        <!-- PLUGIN MANAGEMENT -->
        <pluginManagement>
            <plugins>

                <!-- MAVEN RELEASE PLUGIN -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>${maven-release-plugin.version}</version>
                    <configuration>
                        <tagNameFormat>release/@{project.version}</tagNameFormat>
                        <pushChanges>false</pushChanges>
                        <autoVersionSubmodules>true</autoVersionSubmodules>
                        <arguments>-Drelease-build</arguments>
                    </configuration>
                </plugin>

                <!-- JAVA COMPILER -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <release>${java.version}</release>
                        <showDeprecation>true</showDeprecation>
                        <showWarnings>true</showWarnings>
                        <verbose>false</verbose>
                    </configuration>
                </plugin>

                <!-- MAVEN RUN JUNIT5 TESTS -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <configuration>
                        <excludes>
                            <exclude>**/*UsingTestHarness.java</exclude>
                        </excludes>
                    </configuration>
                </plugin>

                <!-- MAVEN JAR PLUGIN -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${maven-jar-plugin.version}</version>
                </plugin>

                <!-- INCLUDE SOURCE JAR -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${maven-source-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>attach-sources</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

                <!-- INCLUDE RESOURCES -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${maven-resource-plugin.version}</version>
                    <configuration>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>

                <!-- INCLUDE JAVADOC JAR -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>${maven-javadoc-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <source>${java.version}</source>
                        <detectJavaApiLink>false</detectJavaApiLink>
                        <doclint>none</doclint>
                        <!-- Optional: skip errors -->
                        <failOnError>false</failOnError>
                        <additionalOptions>-Xdoclint:none</additionalOptions>
                    </configuration>
                </plugin>

                <!-- DOWNLOAD LICENSE, README & NOTICE ARTIFACTS -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>${maven-dependency-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>copy-license</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>copy</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>com.pi4j</groupId>
                                        <artifactId>pi4j-parent</artifactId>
                                        <version>${project.version}</version>
                                        <classifier>license</classifier>
                                        <type>txt</type>
                                        <overWrite>true</overWrite>
                                        <outputDirectory>${project.build.directory}</outputDirectory>
                                        <destFileName>LICENSE.txt</destFileName>
                                    </artifactItem>
                                    <artifactItem>
                                        <groupId>com.pi4j</groupId>
                                        <artifactId>pi4j-parent</artifactId>
                                        <version>${project.version}</version>
                                        <classifier>notice</classifier>
                                        <type>txt</type>
                                        <overWrite>true</overWrite>
                                        <outputDirectory>${project.build.directory}</outputDirectory>
                                        <destFileName>NOTICE.txt</destFileName>
                                    </artifactItem>
                                    <artifactItem>
                                        <groupId>com.pi4j</groupId>
                                        <artifactId>pi4j-parent</artifactId>
                                        <version>${project.version}</version>
                                        <classifier>readme</classifier>
                                        <type>md</type>
                                        <overWrite>true</overWrite>
                                        <outputDirectory>${project.build.directory}</outputDirectory>
                                        <destFileName>README.md</destFileName>
                                    </artifactItem>
                                </artifactItems>
                                <outputDirectory>${project.build.directory}</outputDirectory>
                                <overWriteReleases>false</overWriteReleases>
                                <overWriteSnapshots>true</overWriteSnapshots>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <!-- GPG PLUGIN (used to sign JARs) -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>${maven-gpg-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>sign-artifacts</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>sign</goal>
                            </goals>
                            <configuration>
                                <keyname>${gpg.keyname}</keyname>
                                <passphraseServerId>${gpg.keyname}</passphraseServerId>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <!-- SCM PLUGIN (used to access github) -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-scm-plugin</artifactId>
                    <version>${maven-scm-plugin.version}</version>
                </plugin>

                <!-- OSGi BUNDLE -->
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>${maven-bundle-plugin.version}</version>
                    <extensions>true</extensions>
                </plugin>

                <!-- USED TO GENERATE HEADER FILES FOR NATIVE LIBS -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>native-maven-plugin</artifactId>
                    <version>${native-maven-plugin.version}</version>
                </plugin>

                <!-- GENERATE SITE DOCUMENTATION -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>${maven-site-plugin.version}</version>
                </plugin>

                <!-- MAVEN ASSEMBLY PLUGIN -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>${maven-assembly-plugin.version}</version>
                </plugin>

                <!-- MAVEN ASSEMBLY PLUGIN -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>${maven-antrun-plugin.version}</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.ant</groupId>
                            <artifactId>ant-jsch</artifactId>
                            <version>${ant-jsch.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.jcraft</groupId>
                            <artifactId>jsch</artifactId>
                            <version>${jsch.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>ant-contrib</groupId>
                            <artifactId>ant-contrib</artifactId>
                            <version>${ant-contrib.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <!-- EXEC MAVEN PLUGIN -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>${exec-maven-plugin.version}</version>
                </plugin>

                <!-- DEPLOY GITHUB SITE PLUGIN -->
                <plugin>
                    <groupId>com.github.github</groupId>
                    <artifactId>site-maven-plugin</artifactId>
                    <version>${site-maven-plugin.version}</version>
                </plugin>

                <!-- BUILD HELPER PLUGIN (used to attach license file as artifacts) -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>${build-helper-maven-plugin.version}</version>
                </plugin>

                <!-- CREATE DEBIAN (.DEB) PACKAGE PLUGIN -->
                <plugin>
                    <groupId>org.vafer</groupId>
                    <artifactId>jdeb</artifactId>
                    <version>${jdeb.version}</version>
                </plugin>

                <!-- ENFORCER PLUGIN -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>3.5.0</version>
                </plugin>

                <!-- Deploy to Maven plugin -->
                <plugin>
                    <groupId>org.sonatype.plugins</groupId>
                    <artifactId>nexus-staging-maven-plugin</artifactId>
                    <version>${nexus-staging-maven-plugin.version}</version>
                    <extensions>true</extensions>
                    <configuration>
                        <serverId>oss.sonatype.org</serverId>
                        <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                    </configuration>
                    <executions>
                        <execution>
                            <id>deploy-to-sonatype</id>
                            <phase>deploy</phase>
                            <goals>
                                <goal>deploy</goal>
                                <goal>release</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

            </plugins>
        </pluginManagement>

        <!-- GLOBAL BUILD PLUGINS (used when building all modules) -->
        <plugins>
            <!-- SPECIFY MINIMAL MAVEN VERSION -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>3.5.0</version>
                <executions>
                    <execution>
                        <id>enforce-maven</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <version>[3.9,)</version>
                                </requireMavenVersion>
                                <requireJavaVersion>
                                    <version>${java.version}</version>
                                </requireJavaVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- USE LATEST SCM PLUGIN TO SUPPORT GIT -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-scm-plugin</artifactId>
                <configuration>
                    <goals>install</goals>
                </configuration>
            </plugin>

            <!-- ATTACH LICENSE AS ARTIFACT -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-artifacts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attach-artifact</goal>
                        </goals>
                        <configuration>
                            <artifacts>
                                <artifact>
                                    <file>${basedir}/LICENSE.txt</file>
                                    <type>txt</type>
                                    <classifier>license</classifier>
                                </artifact>
                                <artifact>
                                    <file>${basedir}/NOTICE.txt</file>
                                    <type>txt</type>
                                    <classifier>notice</classifier>
                                </artifact>
                                <artifact>
                                    <file>${basedir}/README.md</file>
                                    <type>md</type>
                                    <classifier>readme</classifier>
                                </artifact>
                            </artifacts>
                        </configuration>
                    </execution>
                </executions>
                <inherited>false</inherited>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>${maven-checkstyle-plugin.version}</version>
                <executions>
                    <execution>
                        <id>checkstyle-check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <phase>validate</phase>
                    </execution>
                </executions>
                <configuration>
                    <failsOnError>true</failsOnError>
                    <configLocation>config/checkstyle/checkstyle.xml</configLocation>
                    <excludes>**/module-info.java</excludes>
                    <outputFileFormat>plain</outputFileFormat>
                    <consoleOutput>true</consoleOutput>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>${maven-javadoc-plugin.version}</version>
                <reportSets>
                    <reportSet>
                        <id>non-aggregate</id>
                        <configuration>
                            <verbose>false</verbose>
                            <linksource>true</linksource>
                            <name>JavaDocs</name>
                            <description>JavaDoc API documentation</description>
                            <outputName>javadoc/index</outputName>
                            <sourcepath>pi4j-core/src/main/java</sourcepath>
                        </configuration>
                        <reports>
                            <report>javadoc</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>${maven-project-info-reports-plugin.version}</version>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>summary</report>
                            <report>project-team</report>
                            <report>license</report>
                            <report>scm</report>
                            <report>issue-tracking</report>
                            <report>plugins</report>
                            <report>dependency-info</report>
                            <report>dependency-management</report>
                            <report>plugin-management</report>
                            <report>distribution-management</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>

    <profiles>
        <!-- DEFAULT PROFILE -->
        <profile>
            <id>default-profile</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

        <!-- INCLUDE HARDWARE INTEGRATION TESTS WHEN USING THIS BUILD PROFILE -->
        <profile>
            <id>test-hardware</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <includes>**</includes>
                            <systemPropertyVariables>
                                <pi4j.pigpio.host>${pi4j.test.pigpio.host}</pi4j.pigpio.host>
                                <pi4j.pigpio.port>${pi4j.test.pigpio.port}</pi4j.pigpio.port>
                                <pi4j.test.harness.port>${pi4j.test.harness.port}</pi4j.test.harness.port>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- BUILD & INCLUDE JAVA SOURCES JAR  -->
        <profile>
            <id>sources</id>
            <activation>
                <property>
                    <name>release-build</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <!-- INCLUDE SOURCE JAR -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>${maven-source-plugin.version}</version>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- BUILD & INCLUDE JAVADOC JAR  -->
        <profile>
            <id>javadoc</id>
            <activation>
                <property>
                    <name>release-build</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <!-- INCLUDE JAVADOC -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>${maven-javadoc-plugin.version}</version>
                        <configuration>
                            <additionalOptions>
                            </additionalOptions>
                        </configuration>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- BUILD NATIVE SOURCES -->
        <profile>
            <id>native</id>
            <activation>
                <property>
                    <name>release-build</name>
                </property>
            </activation>
            <properties/>
        </profile>

        <!-- SPECIAL PROFILE TO ENABLE DOCKER-COMPILER NATIVE BUILDS BY DEFAULT IF RUNNING ON MACOS -->
        <profile>
            <id>mac</id>
            <activation>
                <os>
                    <family>mac</family>
                </os>
            </activation>
            <properties>
                <pi4j.native.compiler.effective>DOCKER-COMPILER</pi4j.native.compiler.effective>
            </properties>
        </profile>

        <!-- SPECIAL PROFILE TO ENABLE DOCKER-COMPILER NATIVE BUILDS BY DEFAULT IF RUNNING ON WINDOWS -->
        <profile>
            <id>windows</id>
            <activation>
                <os>
                    <family>windows</family>
                </os>
            </activation>
            <properties>
                <pi4j.native.compiler.effective>DOCKER-COMPILER</pi4j.native.compiler.effective>
            </properties>
        </profile>

        <!-- SPECIAL PROFILE TO SUPPORT DOCKER-COMPILER NATIVE BUILDS -->
        <profile>
            <id>docker</id>
            <activation>
                <property>
                    <name>pi4j.native.compiler</name>
                    <value>DOCKER-COMPILER</value>
                </property>
            </activation>
            <properties>
                <pi4j.native.compiler.effective>DOCKER-COMPILER</pi4j.native.compiler.effective>
            </properties>
        </profile>

        <!-- SPECIAL PROFILE TO SUPPORT CROSS-COMPILER NATIVE BUILDS -->
        <profile>
            <id>cross-compile</id>
            <activation>
                <property>
                    <name>pi4j.native.compiler</name>
                    <value>CROSS-COMPILER</value>
                </property>
            </activation>
            <properties>
                <pi4j.native.compiler.effective>CROSS-COMPILER</pi4j.native.compiler.effective>
            </properties>
        </profile>

        <!-- TRANSFER DEVELOPMENT ARTIFACTS TO HARDWARE TESTING PLATFORM -->
        <profile>
            <id>transfer</id>
            <properties>
                <pi4j.dev.transfer>true</pi4j.dev.transfer>
            </properties>
        </profile>

        <!-- profile to deploy to sonatype nexus -->
        <profile>
            <id>deploy</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.sonatype.plugins</groupId>
                        <artifactId>nexus-staging-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
