<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>it.tidalwave.thesefoolishthings</groupId>
    <artifactId>superpom</artifactId>
    <packaging>pom</packaging>
    <version>5.18</version>
    <name>TheseFoolishThings - SuperPOM</name>
    <url>http://tidalwave.it</url>
    <inceptionYear>2010</inceptionYear>
    <description>
        [![Build Status](https://drone.io/bitbucket.org/tidalwave/thesefoolishthings-superpom-src/status.png)]
        (https://drone.io/bitbucket.org/tidalwave/thesefoolishthings-superpom-src/latest)

        A feature-rich SuperPOM for building Java projects. It features:

        * explicit version configuration for a number of plugins;
        * easy configurability by means of pre-defined properties to avoid cut &amp; copy of plugin sections.

        A number of profiles, that can be easily activated, are available for:

        * Spring-AOP configuration;
        * different kinds of Continuous Integration tasks, including a full run of QA tools such as JaCoCo, FindBugs, PMD, etc...
        * deploying WARs and locally running them with Tomcat or Jetty;
        * creating a Mac OS X bundle for JavaFX applications;
        * creating .deb packages for both application and services;
        * a customized release cycle, including all requirements for the Maven Central such as signing, with a 'transactional' behaviour
        (all artifacts, both the DSCM and the Maven artifacts are prepared on the local disk, so they can be uploaded in a second moment);


        Remember to customise it
        ------------------------

        If you use it, please remember to change the ```description```,```url```, ```organization```, ```developers```, ```license```, etc...
        to override those related to the development of this POM.
    </description>

    <organization>
        <name>Tidalwave s.a.s.</name>
        <url>http://tidalwave.it</url>
    </organization>

    <developers>
        <developer>
            <name>Fabrizio Giudici</name>
            <email>fabrizio.giudici@tidalwave.it</email>
            <url>http://tidalwave.it/fabrizio/</url>
            <organization>Tidalwave s.a.s.</organization>
            <organizationUrl>http://tidalwave.it</organizationUrl>
            <roles>
                <role>manager</role>
                <role>developer</role>
            </roles>
            <timezone>+1</timezone>
        </developer>
    </developers>

    <licenses>
        <license>
            <name>Apache-2.0</name>
            <url>http://www.opensource.org/licenses/apache2.0.php</url>
            <comments>Apache License 2.0</comments>
        </license>
    </licenses>

    <issueManagement>
        <system>Jira</system>
        <url>http://services.tidalwave.it/jira/browse/SUP</url>
    </issueManagement>

    <ciManagement>
        <system>hudson</system>
        <url>http://services.tidalwave.it/ci/view/TheseFoolishThings_SuperPOM</url>
    </ciManagement>

    <properties>
        <tft.project.description>TheseFoolishThings Super POM</tft.project.description>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <bundle.namespace>${project.groupId}.${project.artifactId}</bundle.namespace>
        <staging.mvn.repo.url>file://${project.build.directory}/target-maven-repo</staging.mvn.repo.url>

        <netbeans.checkstyle.format>true</netbeans.checkstyle.format>

        <!-- Deprecated properties replaced by tft.* ones -->
        <testFailureIgnore>false</testFailureIgnore> <!-- backward compatibility, to be dropped -->
        <stableAPI>false</stableAPI>
        <stableAPIVersion>(,${project.version})</stableAPIVersion>
        <disableJavaDocs>false</disableJavaDocs>
        <disableDeploy>false</disableDeploy>
        <skipTests>false</skipTests>
        <scm.repo.effective.url>${scm.repo.url}</scm.repo.effective.url>

        <tft.staging-repo.url>https://central.sonatype.com</tft.staging-repo.url>
        <tft.staging-repo.id>central</tft.staging-repo.id>

        <release.profiles>release-sign-artifacts</release.profiles>

        <tft.defaultGoal>clean install</tft.defaultGoal>

        <tft.modulePathInTests>true</tft.modulePathInTests>

        <tft.profile.metrics.checkstyleGoal>checkstyle:checkstyle</tft.profile.metrics.checkstyleGoal>
        <tft.profile.metrics.findbugsGoal />
        <tft.profile.metrics.spotbugsGoal>com.github.spotbugs:spotbugs-maven-plugin:check</tft.profile.metrics.spotbugsGoal>
        <tft.profile.metrics.pmdGoal>pmd:aggregate-cpd pmd:aggregate-pmd</tft.profile.metrics.pmdGoal>
        <tft.profile.metrics.jxrGoal>jxr:aggregate</tft.profile.metrics.jxrGoal>
        <tft.profile.metrics.sonarGoal>sonar:sonar</tft.profile.metrics.sonarGoal>
        <tft.profile.metrics.dependencyCheckGoal>dependency-check:aggregate</tft.profile.metrics.dependencyCheckGoal>
        <tft.profile.metrics.dependencyGoal>dependency:analyze</tft.profile.metrics.dependencyGoal>
        <tft.profile.metrics.defaultGoal>
            clean verify ${tft.profile.metrics.findbugsGoal} ${tft.profile.metrics.spotbugsGoal} ${tft.profile.metrics.pmdGoal}
            ${tft.profile.metrics.checkstyleGoal} ${tft.profile.metrics.dependencyGoal}
            ${tft.profile.metrics.sonarGoal} ${tft.profile.metrics.dependencyCheckGoal}
        </tft.profile.metrics.defaultGoal>

        <tft.checkstyle.skip>false</tft.checkstyle.skip>
        <tft.descriptionStamp>.description</tft.descriptionStamp>
        <tft.findbugs.skip>false</tft.findbugs.skip>

        <tft.revapi.skip>true</tft.revapi.skip>

        <tft.spotbugs.skip>${tft.findbugs.skip}</tft.spotbugs.skip>
        <tft.spotbugs.effort>Max</tft.spotbugs.effort>
        <tft.spotbugs.threshold>Low</tft.spotbugs.threshold>
        <tft.spotbugs.failOnError>false</tft.spotbugs.failOnError>
        <tft.spotbugs.relaxed>false</tft.spotbugs.relaxed>
        <tft.spotbugs.maxHeap>512</tft.spotbugs.maxHeap>
        <tft.spotbugs.maxAllowedViolations>0</tft.spotbugs.maxAllowedViolations>

        <tft.pmd.ruleset>/it/tidalwave/pmd/standard.xml</tft.pmd.ruleset>
        <tft.pmd.ruleset.groupId>it.tidalwave.thesefoolishthings</tft.pmd.ruleset.groupId>
        <tft.pmd.ruleset.artifactId>superpom-config</tft.pmd.ruleset.artifactId>
        <tft.pmd.ruleset.version>${tft.superpom.config.version}</tft.pmd.ruleset.version>

        <findbugs.skip>${tft.findbugs.skip}</findbugs.skip> <!-- TODO: <skip> in the plugin doesn't work -->
        <tft.license.name>tidalwave_asf2</tft.license.name>
        <tft.license.template>/it/tidalwave/license/tidalwave-header-description.ftl</tft.license.template>
        <tft.maven.requiredVersion>3.9.0</tft.maven.requiredVersion>
        <tft.maven.requiredJdk>[11,)</tft.maven.requiredJdk>
        <tft.superpom.config.version>1.11</tft.superpom.config.version>
        <tft.mainClass>please-set-the-tft.mainClass-property-to-specify-the-main-class</tft.mainClass>
        <tft.mainPackage>please-set-the-tft.mainPackage-property-to-specify-the-package-with-the-main-class</tft.mainPackage>
        <tft.jar.classpathInManifest>false</tft.jar.classpathInManifest>

        <!-- Default compiler settings. -->
        <tft.javac.source>11</tft.javac.source>
        <tft.javac.target>11</tft.javac.target>
        <tft.javac.release>11</tft.javac.release>
        <tft.javac.xlint>-Xlint:all</tft.javac.xlint>
        <tft.javac.debug>true</tft.javac.debug>
        <tft.javac.showDeprecation>true</tft.javac.showDeprecation>
        <tft.javac.showWarnings>true</tft.javac.showWarnings>
        <tft.javac.fork>true</tft.javac.fork>

        <tft.pmd.skip>false</tft.pmd.skip>
        <tft.pmd.minimumTokens>100</tft.pmd.minimumTokens>
        <tft.pmd.minimumPriority>5</tft.pmd.minimumPriority>
        <tft.pmd.skipEmptyReport>false</tft.pmd.skipEmptyReport>

        <tft.central-publishing.autoPublish>true</tft.central-publishing.autoPublish>
        <tft.central-publishing.skipPublishing>true</tft.central-publishing.skipPublishing>

        <tft.spring-boot.skip>false</tft.spring-boot.skip>
        <tft.spring-boot.repackage-classifier>exec</tft.spring-boot.repackage-classifier>

        <pmd.skip>${tft.pmd.skip}</pmd.skip> <!-- TODO: <skip> in the plugin doesn't work -->
        <cpd.skip>${tft.pmd.skip}</cpd.skip> <!-- TODO: <skip> in the plugin doesn't work -->
        <tft.project.build.unwoven-classes.directory>${project.build.directory}/unwoven-classes</tft.project.build.unwoven-classes.directory>
        <tft.project.build.unwoven-test-classes.directory>${project.build.directory}/unwoven-test-classes</tft.project.build.unwoven-test-classes.directory>
        <tft.stableAPI>${stableAPI}</tft.stableAPI>
        <tft.stableAPIVersion>${stableAPIVersion}</tft.stableAPIVersion>
        <tft.disableJavaDocs>${disableJavaDocs}</tft.disableJavaDocs>
        <tft.disableDeploy>${disableDeploy}</tft.disableDeploy>
        <tft.javadoc.doclint />
        <tft.javadoc.quiet>true</tft.javadoc.quiet>
        <tft.javadoc.legacyMode>false</tft.javadoc.legacyMode>
        <tft.javadoc.detectJavaApiLink>false</tft.javadoc.detectJavaApiLink>

        <tft.release.localCheckout>true</tft.release.localCheckout>
        <tft.release.preparationGoals>clean install verify</tft.release.preparationGoals>
        <tft.release.completionGoals />
        <tft.release.goals>clean install source:jar-no-fork source:test-jar-no-fork javadoc:jar assembly:single deploy</tft.release.goals>
        <tft.release.sign-artifacts.skip>false</tft.release.sign-artifacts.skip>
        <tft.release.pushChanges>false</tft.release.pushChanges>
        <tft.release.tagNameFormat>@{project.version}</tft.release.tagNameFormat>

        <tft.description />

        <scm.repo.url>ssh://git@bitbucket.org/tidalwave/thesefoolishthings-superpom-src.git</scm.repo.url>
        <scm.repo.readonly.url>https://bitbucket.org/tidalwave/thesefoolishthings-superpom-src</scm.repo.readonly.url>
        <scm.repo.browse.url>https://bitbucket.org/tidalwave/thesefoolishthings-superpom-src/src</scm.repo.browse.url>

        <!-- Default test configuration. -->
        <tft.test.skip>${skipTests}</tft.test.skip>
        <tft.test.maxMemory>768M</tft.test.maxMemory>
        <tft.test.reportsDirectory>${project.build.directory}/surefire-reports/plain</tft.test.reportsDirectory>
        <tft.test.failureIgnore>${testFailureIgnore}</tft.test.failureIgnore>
        <tft.test.excludedGroups />
        <tft.test.vmOptions />
        <tft.test.jacoco.argLine />
        <tft.test.allowAttachSelf>-Djdk.attach.allowAttachSelf=true</tft.test.allowAttachSelf>

        <tft.report.test.aggregate>true</tft.report.test.aggregate>
        <tft.maven-surefire-report-plugin.skip>false</tft.maven-surefire-report-plugin.skip>

        <tft.owasp.skip>false</tft.owasp.skip>

        <tft.site.skip>false</tft.site.skip>

        <tft.native.name>${project.groupId}-${project.artifactId}-${project.version}</tft.native.name>
        <tft.native.buildArgs>--no-fallback</tft.native.buildArgs>
        <tft.native.skip>false</tft.native.skip>

        <tft.embedded-jre.groupId>it.tidalwave.jre</tft.embedded-jre.groupId>
        <tft.embedded-jre.artifactId>adoptium-jre</tft.embedded-jre.artifactId>
        <tft.embedded-jre.version />
        <tft.embedded-jre.type>tgz</tft.embedded-jre.type>
        <tft.embedded-jre.name />
        <tft.embedded-jre.prefix />
        <tft.embedded-jre.classifier.macos.x64>macosx-x64-hotspot</tft.embedded-jre.classifier.macos.x64>
        <tft.embedded-jre.classifier.macos.aarch64>macosx-aarch64-hotspot</tft.embedded-jre.classifier.macos.aarch64>

        <tft.embedded-jre11.version>11.0.10_9</tft.embedded-jre11.version>
        <tft.embedded-jre11.name>11.0.10_9</tft.embedded-jre11.name>
        <tft.embedded-jre11.prefix>jdk-11.0.10+9-jre</tft.embedded-jre11.prefix>

        <tft.embedded-jre17.version>17.0.13_11</tft.embedded-jre17.version>
        <tft.embedded-jre17.name>17.0.13_11</tft.embedded-jre17.name>
        <tft.embedded-jre17.prefix>jdk-17.0.13+11-jre</tft.embedded-jre17.prefix>

        <tft.embedded-jre21.version>21.0.5_11</tft.embedded-jre21.version>
        <tft.embedded-jre21.name>21.0.5_11</tft.embedded-jre21.name>
        <tft.embedded-jre21.prefix>jdk-21.0.5+11-jre</tft.embedded-jre21.prefix>

        <tft.appbundle.vmoptions />
        <tft.javafx.vmargs /> <!-- deprecated -->
        <tft.appbundle.name />
        <tft.appbundle.args>${tft.javafx.vmargs}</tft.appbundle.args>
        <tft.tool.jpackage>${env.JAVA_HOME}/bin/jpackage</tft.tool.jpackage>

        <tft.deb.sourceTarball.artifactId />
        <tft.deb.name />
        <tft.deb.user />
        <tft.deb.group />
        <tft.deb.binaryDirectory />

        <tft.aspectj.ajc.verbose>false</tft.aspectj.ajc.verbose>

        <tft.webapp.deployServerId />
        <tft.webapp.deployServerUrl />
        <tft.webapp.contextPath>/</tft.webapp.contextPath>

        <tft.jetty.host>0.0.0.0</tft.jetty.host>
        <tft.jetty.port>8080</tft.jetty.port>
        <tft.jetty.stopPort>9966</tft.jetty.stopPort>
        <tft.jetty.scanIntervalSeconds>4</tft.jetty.scanIntervalSeconds>
        <tft.jetty.stopKey>${project.groupId}:${project.artifactId}</tft.jetty.stopKey>
        <tft.jetty.tmpDir>${project.build.directory}/jetty-work</tft.jetty.tmpDir>

        <tft.genisoimage>genisoimage</tft.genisoimage>

        <tft.gwt.version>2.1.1</tft.gwt.version>

        <tft.scm>git</tft.scm>

        <!-- tft.test.listeners></tft.test.listeners -->
        <tft.javadoc.excludePackageNames>*.impl:*.impl.*</tft.javadoc.excludePackageNames>
        <tft.javadoc.doclet>nl.talsmasoftware.umldoclet.UMLDoclet</tft.javadoc.doclet>
        <tft.javadoc.doclet.groupId>nl.talsmasoftware</tft.javadoc.doclet.groupId>
        <tft.javadoc.doclet.artifactId>umldoclet</tft.javadoc.doclet.artifactId>
        <tft.javadoc.doclet.additionalParam />

        <tft.buildNumber.getRevisionOnlyOnce>false</tft.buildNumber.getRevisionOnlyOnce>

        <!--==== Plugin Versions ==================================================================================-->

        <tft.maven-antrun-plugin.version>3.1.0</tft.maven-antrun-plugin.version>
        <tft.maven-archetype-plugin.version>3.4.0</tft.maven-archetype-plugin.version>
        <tft.maven-assembly-plugin.version>3.7.1</tft.maven-assembly-plugin.version>
        <tft.maven-bundle-plugin.version>6.0.0</tft.maven-bundle-plugin.version>
        <tft.maven-checkstyle-plugin.version>3.0.0</tft.maven-checkstyle-plugin.version>
        <tft.maven-clean-plugin.version>3.5.0</tft.maven-clean-plugin.version>
        <tft.maven-compiler-plugin.version>3.14.0</tft.maven-compiler-plugin.version>
        <tft.maven-dependency-plugin.version>3.8.1</tft.maven-dependency-plugin.version>
        <tft.maven-deploy-plugin.version>3.1.4</tft.maven-deploy-plugin.version>
        <tft.maven-doap-plugin.version>1.2</tft.maven-doap-plugin.version>
        <tft.maven-enforcer-plugin.version>3.6.1</tft.maven-enforcer-plugin.version>
        <tft.maven-gpg-plugin.version>3.2.8</tft.maven-gpg-plugin.version>
        <tft.maven-graph-plugin.version>1.45</tft.maven-graph-plugin.version>
        <tft.maven-install-plugin.version>3.1.4</tft.maven-install-plugin.version>
        <tft.maven-jar-plugin.version>3.4.2</tft.maven-jar-plugin.version>
        <tft.maven-jarsigner-plugin.version>3.1.0</tft.maven-jarsigner-plugin.version>
        <tft.maven-javadoc-plugin.version>3.11.2</tft.maven-javadoc-plugin.version>
        <tft.maven-jdeb-plugin.version>1.12</tft.maven-jdeb-plugin.version>
        <tft.maven-jxr-plugin.version>3.6.0</tft.maven-jxr-plugin.version>
        <tft.maven-pmd-plugin.version>3.27.0</tft.maven-pmd-plugin.version>
        <tft.maven-project-info-reports-plugin.version>3.9.0</tft.maven-project-info-reports-plugin.version>
        <tft.maven-release-plugin.version>3.1.1</tft.maven-release-plugin.version>
        <tft.maven-resources-plugin.version>3.3.1</tft.maven-resources-plugin.version>
        <tft.maven-scm-plugin.version>2.2.0</tft.maven-scm-plugin.version>
        <tft.maven-shade-plugin.version>3.6.0</tft.maven-shade-plugin.version>
        <tft.maven-site-plugin.version>3.21.0</tft.maven-site-plugin.version>
        <tft.maven-source-plugin.version>3.3.1</tft.maven-source-plugin.version>
        <tft.maven-surefire-plugin.version>3.5.3</tft.maven-surefire-plugin.version>
        <tft.maven-surefire-report-plugin.version>3.5.3</tft.maven-surefire-report-plugin.version>
        <tft.maven-war-plugin.version>3.4.0</tft.maven-war-plugin.version>

        <tft.android-maven-plugin.version>4.6.0</tft.android-maven-plugin.version>
        <tft.aspectj-maven-plugin.version>1.15.0</tft.aspectj-maven-plugin.version>
        <tft.build-helper-maven-plugin.version>3.6.1</tft.build-helper-maven-plugin.version>
        <tft.buildnumber-maven-plugin.version>3.2.1</tft.buildnumber-maven-plugin.version>
        <tft.dependency-check-maven-plugin.version>12.1.0</tft.dependency-check-maven-plugin.version>
        <tft.docker-maven-plugin.version>1.2.2</tft.docker-maven-plugin.version>
        <tft.dockerfile-maven-plugin.version>1.4.13</tft.dockerfile-maven-plugin.version>
        <tft.exec-maven-plugin.version>3.5.1</tft.exec-maven-plugin.version>
        <tft.findbugs-maven-plugin.version>3.0.5</tft.findbugs-maven-plugin.version>
        <tft.gwt-maven-plugin.version>2.10.0</tft.gwt-maven-plugin.version>
        <tft.jacoco-maven-plugin.version>0.8.13</tft.jacoco-maven-plugin.version>
        <tft.jaxb2-maven-plugin.version>3.3.0</tft.jaxb2-maven-plugin.version>
        <tft.jaxws-maven-plugin.version>3.0.0</tft.jaxws-maven-plugin.version>
        <tft.jetty-maven-plugin.version>11.0.24</tft.jetty-maven-plugin.version>
        <tft.license-maven-plugin.version>2.6.0</tft.license-maven-plugin.version>
        <tft.m2e-lifecycle-mapping.version>1.0.0</tft.m2e-lifecycle-mapping.version>
        <tft.mycila-license-maven-plugin.version>4.6</tft.mycila-license-maven-plugin.version>
        <tft.native-maven-plugin.version>0.11.0</tft.native-maven-plugin.version>
        <tft.central-publishing-maven-plugin.version>0.8.0</tft.central-publishing-maven-plugin.version>
        <tft.revapi-maven-plugin.version>0.15.1</tft.revapi-maven-plugin.version>
        <tft.revapi-java.version>0.28.4</tft.revapi-java.version>
        <tft.sonar-maven-plugin.version>5.1.0.4751</tft.sonar-maven-plugin.version>
        <tft.spotbugs-maven-plugin.version>4.9.3.2</tft.spotbugs-maven-plugin.version>
        <tft.spring-boot-maven-plugin.version>3.4.0</tft.spring-boot-maven-plugin.version>
        <tft.tomcat-maven-plugin.version>2.2</tft.tomcat-maven-plugin.version>
        <tft.vaadin-maven-plugin.version>24.5.6</tft.vaadin-maven-plugin.version>
        <tft.versions-maven-plugin.version>2.18.0</tft.versions-maven-plugin.version>
        <tft.wagon-maven-plugin.version>2.0.2</tft.wagon-maven-plugin.version>
        <tft.webdav-jackrabbit.version>3.4.3</tft.webdav-jackrabbit.version>
        <tft.xml-maven-plugin.version>1.1.0</tft.xml-maven-plugin.version>

        <tft.archetype-packaging.version>${tft.maven-archetype-plugin.version}</tft.archetype-packaging.version>
        <tft.javadoc.doclet.version>2.2.2</tft.javadoc.doclet.version>
    </properties>

    <scm>
        <connection>scm:${tft.scm}:${scm.repo.readonly.url}</connection>
        <developerConnection>scm:${tft.scm}:${scm.repo.effective.url}</developerConnection>
        <url>${scm.repo.browse.url}</url>
      <tag>5.18</tag>
  </scm>

    <prerequisites>
        <maven>${tft.maven.requiredVersion}</maven>
    </prerequisites>

    <distributionManagement>
        <site>
            <id>thesefoolishthings-superpom-site</id>
            <url>http://tidalwave.it/projects/superpom</url>
        </site>
        <repository>
            <id>central</id>
            <name>Central Repository</name>
            <url>${tft.staging-repo.url}/api/v1/publisher/upload</url>
        </repository>
    </distributionManagement>

    <build>
        <defaultGoal>${tft.defaultGoal}</defaultGoal>

        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-webdav-jackrabbit</artifactId>
                <version>${tft.webdav-jackrabbit.version}</version>
            </extension>
            <extension>
                <groupId>org.vafer</groupId>
                <artifactId>jdeb</artifactId>
                <version>${tft.maven-jdeb-plugin.version}</version>
            </extension>
        </extensions>

        <!-- For changeSet to be properly evaluated by assembly:single, use also the validate goal -->
        <finalName>${project.artifactId}-${project.version}.${buildNumber}</finalName>

        <!-- ***********************************************************************************************************
        *
        * We want reproducible builds, so all Maven plugins have explicit version numbers.
        *
        ************************************************************************************************************ -->
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${tft.maven-compiler-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>${tft.maven-javadoc-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>${tft.maven-assembly-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${tft.maven-surefire-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-report-plugin</artifactId>
                    <version>${tft.maven-surefire-report-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${tft.maven-jar-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>${tft.maven-pmd-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>${tft.maven-checkstyle-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>${tft.maven-antrun-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>${tft.maven-deploy-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>${tft.maven-release-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>${tft.maven-gpg-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>${tft.maven-shade-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${tft.maven-clean-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>${tft.maven-install-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${tft.maven-resources-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>${tft.maven-site-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>${tft.maven-dependency-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-doap-plugin</artifactId>
                    <version>${tft.maven-doap-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jarsigner-plugin</artifactId>
                    <version>${tft.maven-jarsigner-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${tft.maven-source-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-scm-plugin</artifactId>
                    <version>${tft.maven-scm-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>${tft.maven-war-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>${tft.maven-project-info-reports-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jxr-plugin</artifactId>
                    <version>${tft.maven-jxr-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>aspectj-maven-plugin</artifactId>
                    <version>${tft.aspectj-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>buildnumber-maven-plugin</artifactId>
                    <version>${tft.buildnumber-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>${tft.exec-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>findbugs-maven-plugin</artifactId>
                    <version>${tft.findbugs-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>com.github.spotbugs</groupId>
                    <artifactId>spotbugs-maven-plugin</artifactId>
                    <version>${tft.spotbugs-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>${tft.build-helper-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>gwt-maven-plugin</artifactId>
                    <version>${tft.gwt-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>jaxb2-maven-plugin</artifactId>
                    <version>${tft.jaxb2-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>${tft.license-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.revapi</groupId>
                    <artifactId>revapi-maven-plugin</artifactId>
                    <version>${tft.revapi-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.sonarsource.scanner.maven</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>${tft.sonar-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>${tft.tomcat-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>${tft.versions-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>wagon-maven-plugin</artifactId>
                    <version>${tft.wagon-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>xml-maven-plugin</artifactId>
                    <version>${tft.xml-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>${tft.maven-bundle-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>com.simpligility.maven.plugins</groupId>
                    <artifactId>android-maven-plugin</artifactId>
                    <version>${tft.android-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>${tft.docker-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>dockerfile-maven-plugin</artifactId>
                    <version>${tft.dockerfile-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.fusesource.mvnplugins</groupId>
                    <artifactId>maven-graph-plugin</artifactId>
                    <version>${tft.maven-graph-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>com.mycila</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>${tft.mycila-license-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>com.vaadin</groupId>
                    <artifactId>vaadin-maven-plugin</artifactId>
                    <version>${tft.vaadin-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>${tft.jetty-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.sonatype.central</groupId>
                    <artifactId>central-publishing-maven-plugin</artifactId>
                    <version>${tft.central-publishing-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>com.sun.xml.ws</groupId>
                    <artifactId>jaxws-maven-plugin</artifactId>
                    <version>${tft.jaxws-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.vafer</groupId>
                    <artifactId>jdeb</artifactId>
                    <version>${tft.maven-jdeb-plugin.version}</version>
                </plugin>

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

                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${tft.spring-boot-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.graalvm.buildtools</groupId>
                    <artifactId>native-maven-plugin</artifactId>
                    <version>${tft.native-maven-plugin.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <!-- ***********************************************************************************************************
        *
        *
        *
        ************************************************************************************************************ -->
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <doCheck>false</doCheck>
                    <doUpdate>false</doUpdate>
                    <getRevisionOnlyOnce>${tft.buildNumber.getRevisionOnlyOnce}</getRevisionOnlyOnce>
                    <revisionOnScmFailure>unknown</revisionOnScmFailure>
                    <shortRevisionLength>12</shortRevisionLength>
                </configuration>
            </plugin>

            <!-- Compiler -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <debug>${tft.javac.debug}</debug>
                    <source>${tft.javac.source}</source>
                    <target>${tft.javac.target}</target>
                    <showDeprecation>${tft.javac.showDeprecation}</showDeprecation>
                    <showWarnings>${tft.javac.showWarnings}</showWarnings>
                    <fork>${tft.javac.fork}</fork>
                    <compilerArgs>
                        <arg>-Xlint:-processing</arg>
                        <arg>${tft.javac.xlint}</arg>
                    </compilerArgs>
                </configuration>
                <executions>
                    <execution>
                        <id>default-testCompile</id>
                        <phase>test-compile</phase>
                        <configuration>
                            <useModulePath>${tft.modulePathInTests}</useModulePath>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- Assembler to produce final artifacts. -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <tarLongFileMode>gnu</tarLongFileMode>
                    <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
                    <!-- References to assembly descriptors are in profiles -->
                </configuration>
            </plugin>

            <!-- Executes tests -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>${tft.test.skip}</skipTests>
                    <useModulePath>${tft.modulePathInTests}</useModulePath>
                    <excludedGroups>${tft.test.excludedGroups}</excludedGroups>
                    <reportsDirectory>${tft.test.reportsDirectory}</reportsDirectory>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                    <!-- systemProperties>
                        <property>
                        </property>
                    </systemProperties -->
                    <argLine>-Xmx${tft.test.maxMemory} ${tft.test.vmOptions} ${tft.test.allowAttachSelf}</argLine>
                    <testFailureIgnore>${tft.test.failureIgnore}</testFailureIgnore>
                    <runOrder>alphabetical</runOrder>
                    <!-- properties> FIXME: doesn't work if left empty -> crashes surefire
                        <property>
                            <name>listener</name>
                            <value>${tft.test.listeners}</value>
                        </property>
                    </properties -->
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <configuration>
                    <mainClass>${tft.mainClass}</mainClass>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>${tft.jar.classpathInManifest}</addClasspath>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        </manifest>
                        <manifestEntries>
                            <Implementation-Title>${project.name}</Implementation-Title>
                            <Implementation-Version>${project.version}.${buildNumber}</Implementation-Version>
                        </manifestEntries>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>default-test-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                        <configuration>
                            <skipIfEmpty>true</skipIfEmpty>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>${tft.disableDeploy}</skip>
                </configuration>
            </plugin>

            <!-- SpotBugs (not in a profile, to be used by IDEs) -->
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <!-- Configuration must be replicated to reporting section. -->
                <configuration>
                    <xmlOutput>true</xmlOutput>
                    <spotbugsXmlOutputDirectory>target/site</spotbugsXmlOutputDirectory> <!-- FIXME: needed? -->
                    <skipEmptyReport>false</skipEmptyReport>
                    <effort>${tft.spotbugs.effort}</effort>
                    <threshold>${tft.spotbugs.threshold}</threshold>
                    <relaxed>${tft.spotbugs.relaxed}</relaxed>
                    <failOnError>${tft.spotbugs.failOnError}</failOnError>
                    <maxHeap>${tft.spotbugs.maxHeap}</maxHeap>
                    <maxAllowedViolations>${tft.spotbugs.maxAllowedViolations}</maxAllowedViolations>
                    <skip>${tft.spotbugs.skip}</skip>
                </configuration>
            </plugin>

            <!-- CheckStyle (not in a profile, to be used by IDEs) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>it.tidalwave.thesefoolishthings</groupId>
                        <artifactId>superpom-config</artifactId>
                        <version>${tft.superpom.config.version}</version>
                    </dependency>
                </dependencies>
                <!-- Configuration must be replicated to reporting section. -->
                <configuration>
                    <configLocation>it/tidalwave/checkstyle/checkstyle.xml</configLocation>
                    <skip>${tft.checkstyle.skip}</skip>
                </configuration>
            </plugin>

            <!-- PMD (not in a profile, to be used by IDEs) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>${tft.pmd.ruleset.groupId}</groupId>
                        <artifactId>${tft.pmd.ruleset.artifactId}</artifactId>
                        <version>${tft.pmd.ruleset.version}</version>
                    </dependency>
                </dependencies>
                <!-- Configuration must be replicated to reporting section. -->
                <configuration>
                    <minimumTokens>${tft.pmd.minimumTokens}</minimumTokens>
                    <minimumPriority>${tft.pmd.minimumPriority}</minimumPriority>
                    <targetJdk>${tft.javac.source}</targetJdk>
                    <skip>${tft.pmd.skip}</skip>
                    <skipEmptyReport>${tft.pmd.skipEmptyReport}</skipEmptyReport>
                    <rulesets>
                        <ruleset>${tft.pmd.ruleset}</ruleset>
                    </rulesets>
                </configuration>
            </plugin>

            <!-- OWASP -->
            <plugin>
                <groupId>org.owasp</groupId>
                <artifactId>dependency-check-maven</artifactId>
                <!-- Configuration must be replicated in reporting section -->
                <configuration>
                    <skip>${tft.owasp.skip}</skip>
                    <assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled>
                    <msbuildAnalyzerEnabled>false</msbuildAnalyzerEnabled>
                    <formats>
                        <format>xml</format>
                        <format>html</format>
                    </formats>
                </configuration>
            </plugin>

            <!-- RevAPI -->
            <plugin>
                <groupId>org.revapi</groupId>
                <artifactId>revapi-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.revapi</groupId>
                        <artifactId>revapi-java</artifactId>
                        <version>${tft.revapi-java.version}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <skip>${tft.revapi.skip}</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>api-check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Configures the release process, calling the assembly to include extra artifacts in deploy -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <localCheckout>${tft.release.localCheckout}</localCheckout>
                    <pushChanges>${tft.release.pushChanges}</pushChanges>
                    <preparationGoals>${tft.release.preparationGoals}</preparationGoals>
                    <completionGoals>${tft.release.completionGoals}</completionGoals>
                    <goals>${tft.release.goals}</goals>
                    <arguments>-P${release.profiles} -DaltDeploymentRepository="${altDeploymentRepository}" -DdryRun=${dryRun}</arguments>
                    <tagNameFormat>${tft.release.tagNameFormat}</tagNameFormat>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.sonatype.central</groupId>
                <artifactId>central-publishing-maven-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <publishingServerId>${tft.staging-repo.id}</publishingServerId>
                    <centralBaseUrl>${tft.staging-repo.url}</centralBaseUrl>
                    <autoPublish>${tft.central-publishing.autoPublish}</autoPublish>
                    <skipPublishing>${tft.central-publishing.skipPublishing}</skipPublishing>
                    <deploymentName>${project.name} ${project.version}</deploymentName>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>${tft.maven-enforcer-plugin.version}</version>
                <executions>
                    <execution>
                        <id>enforce-maven</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <version>${tft.maven.requiredVersion}</version>
                                </requireMavenVersion>
                                <requireJavaVersion>
                                    <message>
                                        To build this project JDK ${tft.maven.requiredJdk} is required. Please install it and properly set JAVA_HOME.
                                    </message>
                                    <version>${tft.maven.requiredJdk}</version>
                                </requireJavaVersion>
                                <requirePluginVersions>
                                    <message>Best Practice is to always define plugin versions!</message>
                                    <banLatest>true</banLatest>
                                    <banRelease>true</banRelease>
                                    <banSnapshots>true</banSnapshots>
                                    <phases>clean,deploy,site</phases>
                                </requirePluginVersions>
                                <reactorModuleConvergence>
                                    <message>The reactor is not valid</message>
                                    <ignoreModuleDependencies>false</ignoreModuleDependencies>
                                </reactorModuleConvergence>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <configuration>
                    <skip>${tft.site.skip}</skip>
                    <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
                    <outputEncoding>${project.build.sourceEncoding}</outputEncoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>license-maven-plugin</artifactId>
                <configuration>
                    <canUpdateCopyright>true</canUpdateCopyright>
                    <canUpdateDescription>true</canUpdateDescription>
                    <licenseName>${tft.license.name}</licenseName>
                    <licenseResolver>classpath://it/tidalwave/license</licenseResolver>
                    <addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
                    <verbose>false</verbose>
                    <addSvnKeyWords>true</addSvnKeyWords>
                    <descriptionTemplate>${tft.license.template}</descriptionTemplate>
                    <excludes>
                        <exclude>LICENSE.txt</exclude>
                        <exclude>**/*.form</exclude>
                        <exclude>**/*.mf</exclude>
                        <exclude>**/.description</exclude>
                        <exclude>.hgtags</exclude>
                        <exclude>.hgignore</exclude>
                        <exclude>.gitignore</exclude>
                        <exclude>.svnignore</exclude>
                        <exclude>**/.classpath</exclude>
                        <exclude>**/.settings</exclude>
                        <exclude>**/archetypes/**</exclude>
                        <exclude>**/*-profile</exclude>
                    </excludes>
                    <roots>
                        <root>src</root>
                    </roots>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>it.tidalwave.thesefoolishthings</groupId>
                        <artifactId>superpom-config</artifactId>
                        <version>${tft.superpom.config.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <!-- Configuration must be replicated in reporting section -->
                <configuration>
                    <docfilessubdirs>true</docfilessubdirs>
                    <excludePackageNames>${tft.javadoc.excludePackageNames}</excludePackageNames>
                    <skip>${tft.disableJavaDocs}</skip>
                    <failOnError>false</failOnError>
                    <detectJavaApiLink>${tft.javadoc.detectJavaApiLink}</detectJavaApiLink>
                    <quiet>${tft.javadoc.quiet}</quiet>
                    <legacyMode>${tft.javadoc.legacyMode}</legacyMode>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <!--====================================================================================================================================================

        This profile is used in Continuous Integration.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-ci-v1</id>
            <properties>
                <tft.test.excludedGroups>no-ci</tft.test.excludedGroups>
                <testFailureIgnore>true</testFailureIgnore>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile is used in Continuous Integration to create QA metrics data.
        See also it.tidalwave-metrics-pre-site-v1.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-metrics-v2</id>
            <properties>
                <tft.test.reportsDirectory>${project.build.directory}/surefire-reports/jacoco</tft.test.reportsDirectory>
                <tft.test.failureIgnore>true</tft.test.failureIgnore>
            </properties>
            <build>
                <defaultGoal>${tft.profile.metrics.defaultGoal}</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <!-- Note the @ for late property evaluation. -->
                            <argLine>-Xmx${tft.test.maxMemory} ${tft.test.vmOptions} @{tft.test.jacoco.argLine} ${tft.test.allowAttachSelf}</argLine>
                        </configuration>
                    </plugin>

                    <!-- Jacoco -->
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <version>${tft.jacoco-maven-plugin.version}</version>
                        <configuration>
                            <propertyName>tft.test.jacoco.argLine</propertyName>
                            <skip>${tft.test.skip}</skip>
                            <!--<destfile>${project.build.directory}/coverage-reports/jacoco-unit.exec</destfile>-->
                            <!--<datafile>${project.build.directory}/target/coverage-reports/jacoco-unit.exec</datafile>-->
                        </configuration>
                        <executions>
                            <execution>
                                <id>prepare-agent</id>
                                <!-- This properly sets ${tft.test.jacoco.argLine} so it's later used by Surefire -->
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>report</id>
                                <phase>test</phase>
                                <goals>
                                    <goal>report</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- SpotBugs -->

                    <!-- PMD is configured in the default build section -->
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile suppresses all plugins configured in it.tidalwave-metrics-v2 that are going to be run in it.tidalwave-site-v1. You might want to
        activate it in CI to prevent duplicate work when both profiles are used.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-metrics-pre-site-v1</id>
            <properties>
                <tft.profile.metrics.checkstyleGoal />
                <tft.profile.metrics.spotbugsGoal />
                <tft.profile.metrics.pmdGoal />
                <tft.profile.metrics.dependencyCheckGoal />
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile generates a Surefire report for the site. Must be separately run after a build (plain or with metrics). Some reports, such as Surefire
        or Jacoco, are collected from the previous build; others are re-created. For these reasons configurations of latter plugins need to be replicated here.

        Please note that plugin versions must be always replicated, otherwise the latest ones are used - see https://issues.apache.org/jira/browse/MSITE-443.

        See also it.tidalwave-metrics-pre-site-v1.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-site-v1</id>
            <properties>
                <tft.defaultGoal>site site:stage</tft.defaultGoal>
            </properties>
            <reporting>
                <excludeDefaults>true</excludeDefaults> <!-- FIXME: needed? -->
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-project-info-reports-plugin</artifactId>
                        <version>${tft.maven-project-info-reports-plugin.version}</version>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>ci-management</report>
                                    <report>dependencies</report>
                                    <report>dependency-convergence</report>
                                    <report>dependency-info</report>
                                    <report>dependency-management</report>
                                    <report>distribution-management</report>
                                    <report>index</report>
                                    <report>issue-management</report>
                                    <report>licenses</report>
                                    <report>mailing-lists</report>
                                    <report>modules</report>
                                    <report>plugin-management</report>
                                    <report>plugins</report>
                                    <report>scm</report>
                                    <report>summary</report>
                                    <report>team</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>

                    <!-- Surefire -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-report-plugin</artifactId>
                        <version>${tft.maven-surefire-report-plugin.version}</version>
                        <configuration>
                            <skipSurefireReport>${tft.maven-surefire-report-plugin.skip}</skipSurefireReport>
                            <aggregate>${tft.report.test.aggregate}</aggregate>
                            <reportsDirectories>
                                <reportDirectory>${project.build.directory}/surefire-reports/plain</reportDirectory>
                                <reportDirectory>${project.build.directory}/surefire-reports/jacoco</reportDirectory>
                            </reportsDirectories>
                        </configuration>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <!-- Just collects reports generated in a previous run. -->
                                    <report>report-only</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>

                    <!-- Jacoco -->
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <version>${tft.jacoco-maven-plugin.version}</version>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>report-aggregate</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>

                    <!-- SpotBugs -->
                    <plugin>
                        <groupId>com.github.spotbugs</groupId>
                        <artifactId>spotbugs-maven-plugin</artifactId>
                        <version>${tft.spotbugs-maven-plugin.version}</version>
                        <!-- Configuration must be replicated from build section. -->
                        <!-- No aggregate reports for SpotBugs: https://spotbugs.github.io/spotbugs-maven-plugin/faq.html#Aggregate_Reporting -->
                        <configuration>
                            <xmlOutput>true</xmlOutput>
                            <spotbugsXmlOutput>true</spotbugsXmlOutput>
                            <spotbugsXmlOutputDirectory>target/site</spotbugsXmlOutputDirectory> <!-- FIXME: needed? -->
                            <skipEmptyReport>false</skipEmptyReport>
                            <effort>${tft.spotbugs.effort}</effort>
                            <threshold>${tft.spotbugs.threshold}</threshold>
                            <relaxed>${tft.spotbugs.relaxed}</relaxed>
                            <failOnError>${tft.spotbugs.failOnError}</failOnError>
                            <maxHeap>${tft.spotbugs.maxHeap}</maxHeap>
                            <maxAllowedViolations>${tft.spotbugs.maxAllowedViolations}</maxAllowedViolations>
                            <skip>${tft.spotbugs.skip}</skip>
                        </configuration>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>spotbugs</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>

                    <!-- PMD -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-pmd-plugin</artifactId>
                        <version>${tft.maven-pmd-plugin.version}</version>
                        <!-- Configuration must be replicated from build section. -->
                        <configuration>
                            <minimumTokens>${tft.pmd.minimumTokens}</minimumTokens>
                            <minimumPriority>${tft.pmd.minimumPriority}</minimumPriority>
                            <targetJdk>${tft.javac.source}</targetJdk>
                            <skip>${tft.pmd.skip}</skip>
                            <skipEmptyReport>${tft.pmd.skipEmptyReport}</skipEmptyReport>
                            <includeXmlInSite>${tft.pmd.includeXmlInSite}</includeXmlInSite>
                            <rulesets>
                                <ruleset>${tft.pmd.ruleset}</ruleset>
                            </rulesets>
                        </configuration>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <!-- FIXME: can't reuse tft.profile.metrics.pmdGoal -->
                                    <report>aggregate-pmd</report>
                                    <report>aggregate-cpd</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>

                    <!-- CheckStyle (not in a profile, to be used by IDEs) -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-checkstyle-plugin</artifactId>
                        <version>${tft.maven-checkstyle-plugin.version}</version>
                        <!-- Configuration must be replicated from build section. -->
                        <configuration>
                            <configLocation>it/tidalwave/checkstyle/checkstyle.xml</configLocation>
                            <skip>${tft.checkstyle.skip}</skip>
                        </configuration>
                    </plugin>

                    <!-- JXR -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jxr-plugin</artifactId>
                        <version>${tft.maven-jxr-plugin.version}</version>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>jxr-no-fork</report>
                                    <report>test-jxr-no-fork</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                        </plugin>

                    <!-- OWASP -->
                    <plugin>
                        <groupId>org.owasp</groupId>
                        <artifactId>dependency-check-maven</artifactId>
                        <version>${tft.dependency-check-maven-plugin.version}</version>
                        <!-- Configuration must be replicated from build section. -->
                        <configuration>
                            <skip>${tft.owasp.skip}</skip>
                            <assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled>
                            <msbuildAnalyzerEnabled>false</msbuildAnalyzerEnabled>
                        </configuration>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>aggregate</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>

                    <!-- RevAPI -->
                    <plugin>
                        <groupId>org.revapi</groupId>
                        <artifactId>revapi-maven-plugin</artifactId>
                        <version>${tft.revapi-maven-plugin.version}</version>
                        <configuration>
                            <skip>${tft.revapi.skip}</skip>
                        </configuration>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>report-aggregate</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>

                    <!-- JavaDoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>${tft.maven-javadoc-plugin.version}</version>
                        <!-- Configuration must be replicated from build section. -->
                        <configuration>
                            <!-- FIXME -->
                            <!-- https://stackoverflow.com/questions/27935661/how-to-avoid-duplicate-forking-when-generating-aggregated-javadoc-in-a-multimodu -->
                            <!-- inherited>false</inherited -->

                            <docfilessubdirs>true</docfilessubdirs>
                            <excludePackageNames>${tft.javadoc.excludePackageNames}</excludePackageNames>
                            <skip>${tft.disableJavaDocs}</skip>
                            <failOnError>false</failOnError>
                            <detectJavaApiLink>${tft.javadoc.detectJavaApiLink}</detectJavaApiLink>
                            <quiet>${tft.javadoc.quiet}</quiet>
                            <legacyMode>${tft.javadoc.legacyMode}</legacyMode>
                        </configuration>
                        <reportSets>
                            <reportSet>
                                <id>default</id>
                                <reports>
                                    <report>javadoc-no-fork</report>
                                    <report>test-javadoc-no-fork</report>
                                </reports>
                            </reportSet>
                            <reportSet><!-- aggregate reportSet, to define in poms having modules -->
                                <id>aggregate</id>
                                <inherited>false</inherited><!-- don't run aggregate in child modules -->
                                <reports>
                                    <report>aggregate-no-fork</report>
                                    <report>test-aggregate-no-fork</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>
                </plugins>
            </reporting>
        </profile>

        <!--====================================================================================================================================================

         This profile is activated during a release.

        =====================================================================================================================================================-->
        <profile>
            <id>release</id>
            <properties>
                <skipTests>true</skipTests>
                <dryRun>false</dryRun>
                <altDeploymentRepository>release-repo-hudson::default::${staging.mvn.repo.url}</altDeploymentRepository>
            </properties>
            <build>
                <finalName>${project.artifactId}-${project.version}</finalName>
                <plugins>
                    <!-- FIXME: this directory is created in all submodules, only the master one is needed -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>clean-release-dirs</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <delete dir="${project.build.directory}/target-maven-repo" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile signs the build artifacts. It is automatically enabled during a release; signing requires that the proper certificates have been locally
        set up with PGP. If you want to skip signing, set the property tft.release.sign-artifacts.skip to true.

        =====================================================================================================================================================-->
        <profile>
            <id>release-sign-artifacts</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <configuration>
                            <keyname>${gpg.keyname}</keyname>
                            <passphrase>${gpg.passphrase}</passphrase>
                            <skip>${tft.release.sign-artifacts.skip}</skip>
                        </configuration>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile stores the current build description and Java version into a local file - used for Hudson builds.

        =====================================================================================================================================================-->
        <profile>
            <id>generate-revision-id</id>
            <properties>
                <tft.description>DESCRIPTION: ${env.GIT_BRANCH} ${project.version} ${buildNumber}</tft.description>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>generate-and-print-build-description</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <echo file="${tft.descriptionStamp}">${tft.description}${line.separator}</echo>
                                        <echo level="info">${tft.description}</echo>
                                        <echo level="info">
                                            Java Version: ${java.version} -source ${tft.javac.source} -target ${tft.javac.source} -release ${tft.javac.release}
                                        </echo>
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile prints the current build description and Java version - used for Hudson builds.

        =====================================================================================================================================================-->
        <profile>
            <id>show-revision-id</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>print-build-description</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <!-- Use a different property since the main one is read-only. -->
                                        <loadfile property="tft.description2" srcFile="${tft.descriptionStamp}" />
                                        <echo level="info">${tft.description2}</echo>
                                        <echo level="info">Java Version: ${java.version} -source ${tft.javac.source} -target ${tft.javac.source} -release
                                            ${tft.javac.release}
                                        </echo>
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile detects Mercurial, it's used by the release-commit profile.

        =====================================================================================================================================================-->
        <profile>
            <id>scm-detector-hg</id>
            <activation>
                <file>
                    <exists>.hg</exists>
                </file>
            </activation>
            <properties>
                <tft.scm-detector.hg>true</tft.scm-detector.hg>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile detects Git, it's used by the release-commit profile.

        =====================================================================================================================================================-->
        <profile>
            <id>scm-detector-git</id>
            <activation>
                <file>
                    <exists>.git</exists>
                </file>
            </activation>
            <properties>
                <tft.scm-detector.git>true</tft.scm-detector.git>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile deploys local artifacts to the remote repository and pushes SCM changes  after a successful staged release.
        Run as mvn -N -Prelease-commit

        =====================================================================================================================================================-->
        <profile>
            <id>release-commit</id>
            <build>
                <defaultGoal>initialize</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>wagon-maven-plugin</artifactId>
                        <configuration>
                            <source>${staging.mvn.repo.url}</source>
                            <target>${project.distributionManagement.repository.url}</target>
                            <targetId>${project.distributionManagement.repository.id}</targetId>
                            <includes>*/**</includes>
                        </configuration>
                        <executions>
                            <execution>
                                <id>publish-repo</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>copy</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>push-hg</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target name="push-hg" if="tft.scm-detector.hg">
                                        <exec executable="hg" dir="${project.build.directory}" failonerror="true">
                                            <arg value="push" />
                                        </exec>
                                    </target>
                                </configuration>
                            </execution>
                            <execution>
                                <id>push-git</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target name="push-git" if="tft.scm-detector.git">
                                        <exec executable="git" dir="${project.build.directory}" failonerror="true">
                                            <arg value="push" />
                                            <arg value="origin" />
                                            <arg value="master" />
                                            <arg value="--tags" />
                                        </exec>
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile deploys local artifacts to the Maven Central Repository and pushes SCM changes  after a successful staged release.
        Run as mvn -N -Prelease-commit

        =====================================================================================================================================================-->
        <profile>
            <id>release-commit-central</id>
            <build>
                <defaultGoal>initialize</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.gmavenplus</groupId>
                        <artifactId>gmavenplus-plugin</artifactId>
                        <version>4.2.1</version>
                        <executions>
                            <execution>
                                <id>compute-bearer-token</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>execute</goal>
                                </goals>
                                <configuration>
                                    <scripts>
                                        <script><![CDATA[
                                import java.util.Base64;
                                String username = session.settings.getServer('central').getUsername();;
                                String password = session.settings.getServer('central').getPassword();
                                String credentials = username + ":" + password;
                                String token = Base64.getEncoder().encodeToString(credentials.getBytes());
                                project.properties.setProperty('central.bearer.token', token);
                                    ]]></script>
                                    </scripts>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.groovy</groupId>
                                <artifactId>groovy</artifactId>
                                <version>4.0.26</version>
                                <scope>runtime</scope>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>upload-central-bundle</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                                <configuration>
                                    <executable>curl</executable>
                                    <arguments>
                                        <argument>--silent</argument>
                                        <argument>--request</argument>
                                        <argument>POST</argument>
                                        <argument>--header</argument>
                                        <argument>Authorization: Bearer ${central.bearer.token}</argument>
                                        <argument>--form</argument>
                                        <argument>bundle=@${project.basedir}/target/checkout/target/central-publishing/central-bundle.zip</argument>
                                        <argument>${tft.staging-repo.url}/api/v1/publisher/upload?name=${project.groupId}:${project.artifactId}:${project.version}</argument>
                                    </arguments>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>push-hg</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target name="push-hg" if="tft.scm-detector.hg">
                                        <exec executable="hg" dir="${project.build.directory}" failonerror="true">
                                            <arg value="push" />
                                        </exec>
                                    </target>
                                </configuration>
                            </execution>
                            <execution>
                                <id>push-git</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target name="push-git" if="tft.scm-detector.git">
                                        <exec executable="git" dir="${project.build.directory}" failonerror="true">
                                            <arg value="push" />
                                            <arg value="origin" />
                                            <arg value="master" />
                                            <arg value="--tags" />
                                        </exec>
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile is executed when a staged release is canceled - it erases the local SCM repository. BEWARE: this has been designed to work with Jenkins,
        not on your local workarea.

        =====================================================================================================================================================-->
        <profile>
            <id>release-cancel</id>
            <build>
                <defaultGoal>initialize</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>strip-hg</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <!-- FIXME: would be better to strip local changes -->
                                    <target name="strip-hg" if="tft.scm-detector.hg">
                                        <delete dir="${project.build.directory}/.hg" />
                                    </target>
                                </configuration>
                            </execution>
                            <execution>
                                <id>strip-git</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <!-- FIXME: would be better to strip local changes -->
                                    <target name="strip-git" if="tft.scm-detector.git">
                                        <delete dir="${project.build.directory}/.git" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile deploys the extra artifacts that are created by the assembly plugin.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-deploy-extra-artifacts-v2</id>
            <properties>
                <staging.mvn.repo.url>file://${project.build.directory}/../../target-maven-repo</staging.mvn.repo.url>
                <altDeploymentRepository>release-repo-hudson::default::${staging.mvn.repo.url}</altDeploymentRepository>
            </properties>
            <build>
                <defaultGoal>initialize assembly:single build-helper:attach-artifact verify deploy:deploy</defaultGoal>
                <finalName>${project.artifactId}-${project.version}</finalName>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profiles creates an assembly 'bin' artifact if its configuration file is present.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-assembly-bin-descriptor</id>
            <activation>
                <file>
                    <exists>src/assemble/bin.xml</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <configuration>
                            <descriptors combine.children="append">
                                <descriptor>src/assemble/bin.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <configuration>
                            <artifacts combine.children="append">
                                <artifact>
                                    <file>${project.build.directory}/${project.build.finalName}-bin.tar.gz</file>
                                    <type>tar.gz</type>
                                    <classifier>bin</classifier>
                                </artifact>
                            </artifacts>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profiles creates an assembly 'project' artifact if its configuration file is present.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-assembly-project-descriptor</id>
            <activation>
                <file>
                    <exists>src/assemble/project.xml</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <configuration>
                            <descriptors combine.children="append">
                                <descriptor>src/assemble/project.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <configuration>
                            <artifacts combine.children="append">
                                <artifact>
                                    <file>${project.build.directory}/${project.build.finalName}-project.tar.gz</file>
                                    <type>tar.gz</type>
                                    <classifier>project</classifier>
                                </artifact>
                            </artifacts>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profiles enables the registration of the main class in the manifest (from the property tft.mainClass).
        To activate the profile create an empty file in src/config/it.tidalwave-manifest-with-main-v1.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-manifest-with-main-v1</id>
            <activation>
                <file>
                    <exists>src/config/it.tidalwave-manifest-with-main-v1</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>${tft.mainClass}</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile configures Tomcat for the build. Create an empty file in src/config/activate-tomcat-profile to activate it.

        =====================================================================================================================================================-->
        <profile>
            <id>tomcat</id>
            <activation>
                <file>
                    <exists>src/config/activate-tomcat-profile</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat7-maven-plugin</artifactId>
                        <configuration>
                            <server>${tft.webapp.deployServerId}</server>
                            <url>${tft.webapp.deployServerUrl}</url>
                            <path>${tft.webapp.contextPath}</path>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile configures Jetty for the build. Create an empty file in src/config/activate-it.tidalwave-jetty-v2-profile to activate it.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-jetty-v2</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-jetty-v2-profile</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-jetty-tmpdir</id>
                                <configuration>
                                    <target>
                                        <mkdir dir="${tft.jetty.tmpDir}" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-maven-plugin</artifactId>
                        <configuration>
                            <httpConnector>
                                <host>${tft.jetty.host}</host>
                                <port>${tft.jetty.port}</port>
                            </httpConnector>
                            <tmpDirectory>${tft.jetty.tmpDir}</tmpDirectory>
                            <stopPort>${tft.jetty.stopPort}</stopPort>
                            <stopKey>${tft.jetty.stopKey}</stopKey>
                            <scanIntervalSeconds>${tft.jetty.scanIntervalSeconds}</scanIntervalSeconds>
                            <war>${settings.localRepository}/it/tidalwave/northernwind/${nw.webApp}/${nw.version}/${nw.webApp}-${nw.version}.war</war>
                            <contextPath>${tft.webapp.contextPath}</contextPath>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile configures AspectJ in the build. Create an empty file in src/config/activate-it.tidalwave-aspectj-v2-profile to  activate it.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-aspectj-v2</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-aspectj-v2-profile</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>aspectj-maven-plugin</artifactId>
                        <configuration>
                            <Xlint>ignore</Xlint>
                            <source>${tft.javac.source}</source>
                            <complianceLevel>${tft.javac.source}</complianceLevel>
                            <target>${tft.javac.target}</target>
                            <!-- Prevent ajc from finding sources -->
                            <sources />
                            <testSources />
                            <!-- This is important because sometimes the plugin decides that there's nothing to do
                                 because sources are not specified -->
                            <forceAjcCompile>true</forceAjcCompile>
                            <showWeaveInfo>${tft.aspectj.ajc.verbose}</showWeaveInfo>
                            <verbose>${tft.aspectj.ajc.verbose}</verbose>
                            <aspectLibraries>
                                <dependency>
                                    <groupId>org.springframework</groupId>
                                    <artifactId>spring-aspects</artifactId>
                                </dependency>
                            </aspectLibraries>
                        </configuration>
                        <executions>
                            <execution>
                                <id>weave-classes</id>
                                <phase>process-classes</phase>
                                <goals>
                                    <goal>compile</goal>
                                </goals>
                                <configuration>
                                    <weaveDirectories>
                                        <weaveDirectory>${project.build.outputDirectory}</weaveDirectory>
                                    </weaveDirectories>
                                </configuration>
                            </execution>
                            <execution>
                                <id>weave-test-classes</id>
                                <phase>process-test-classes</phase>
                                <goals>
                                    <goal>test-compile</goal>
                                </goals>
                                <configuration>
                                    <weaveDirectories>
                                        <weaveDirectory>${project.build.testOutputDirectory}</weaveDirectory>
                                    </weaveDirectories>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>org.aspectj</groupId>
                                <artifactId>aspectjweaver</artifactId>
                                <version>${tft.aspectjrt.version}</version>
                            </dependency>
                            <dependency>
                                <groupId>org.aspectj</groupId>
                                <artifactId>aspectjtools</artifactId>
                                <version>${tft.aspectjrt.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile configures AspectJ for Spring in the build. Create an empty file in src/config/activate-it.tidalwave.aspectj-springaop-v1-profile to
        activate it.
        This profile arranges things so that AspectJ is compatible with other tools that manipulate the bytecode, such as annotation processors (e.g. Lombok).
        The original, unwoven classes are stored in target/unwoven-classes and target/unwoven-test-classes.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-aspectj-springaop-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-aspectj-springaop-v1-profile</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>default-compile</id>
                                <phase>compile</phase>
                                <configuration>
                                    <outputDirectory>${tft.project.build.unwoven-classes.directory}</outputDirectory>
                                </configuration>
                            </execution>
                            <execution>
                                <id>default-testCompile</id>
                                <phase>test-compile</phase>
                                <configuration>
                                    <outputDirectory>${tft.project.build.unwoven-test-classes.directory}</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- Create the target directories for unwoven classes -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-unwoven-classes-dirs</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <mkdir dir="${tft.project.build.unwoven-classes.directory}" />
                                        <mkdir dir="${tft.project.build.unwoven-test-classes.directory}" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>aspectj-maven-plugin</artifactId>
                        <configuration>
                            <Xlint>ignore</Xlint>
                            <source>${tft.javac.source}</source>
                            <complianceLevel>${tft.javac.source}</complianceLevel>
                            <target>${tft.javac.target}</target>
                            <!-- Prevent ajc from finding sources -->
                            <sources />
                            <testSources />
                            <!-- This is important because sometimes the plugin decides that there's nothing to do
                                 because sources are not specified -->
                            <forceAjcCompile>true</forceAjcCompile>
                            <showWeaveInfo>${tft.aspectj.ajc.verbose}</showWeaveInfo>
                            <verbose>${tft.aspectj.ajc.verbose}</verbose>
                            <aspectLibraries>
                                <dependency>
                                    <groupId>org.springframework</groupId>
                                    <artifactId>spring-aspects</artifactId>
                                </dependency>
                            </aspectLibraries>
                        </configuration>
                        <executions>
                            <execution>
                                <id>weave-classes</id>
                                <phase>process-classes</phase>
                                <goals>
                                    <goal>compile</goal>
                                </goals>
                                <configuration>
                                    <weaveDirectories>
                                        <weaveDirectory>${tft.project.build.unwoven-classes.directory}</weaveDirectory>
                                    </weaveDirectories>
                                </configuration>
                            </execution>
                            <execution>
                                <id>weave-test-classes</id>
                                <phase>process-test-classes</phase>
                                <goals>
                                    <goal>test-compile</goal>
                                </goals>
                                <configuration>
                                    <weaveDirectories>
                                        <weaveDirectory>${tft.project.build.unwoven-test-classes.directory}</weaveDirectory>
                                    </weaveDirectories>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>org.aspectj</groupId>
                                <artifactId>aspectjweaver</artifactId>
                                <version>${tft.aspectjrt.version}</version>
                            </dependency>
                            <dependency>
                                <groupId>org.aspectj</groupId>
                                <artifactId>aspectjtools</artifactId>
                                <version>${tft.aspectjrt.version}</version>
                            </dependency>
                            <!-- Fix for JDK 9 and later - should be unnecessary when version 1.11.1 is releaded. -->
                            <dependency>
                                <groupId>com.sun</groupId>
                                <artifactId>tools</artifactId>
                                <version>${java.version}</version>
                                <scope>system</scope>
                                <systemPath>${project.basedir}/pom.xml</systemPath>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                    <exclusions>
                        <exclusion>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-test</artifactId>
                        </exclusion>
                        <exclusion>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjweaver</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                </dependency>
            </dependencies>
        </profile>

        <!--====================================================================================================================================================

        This profile configures AspectJ for Spring in the build. Create an empty file in src/config/activate-it.tidalwave.aspectj-springaop-v2-profile to
        activate it.
        This profile arranges things so that AspectJ is compatible with other tools that manipulate the bytecode, such as annotation processors (e.g. Lombok).
        The original, unwoven classes are stored in target/unwoven-classes and target/unwoven-test-classes.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-aspectj-springaop-v2</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-aspectj-springaop-v2-profile</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>default-compile</id>
                                <phase>compile</phase>
                                <configuration>
                                    <outputDirectory>${tft.project.build.unwoven-classes.directory}</outputDirectory>
                                </configuration>
                            </execution>
                            <execution>
                                <id>default-testCompile</id>
                                <phase>test-compile</phase>
                                <configuration>
                                    <outputDirectory>${tft.project.build.unwoven-test-classes.directory}</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- Create the target directories for unwoven classes -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-unwoven-classes-dirs</id>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <mkdir dir="${tft.project.build.unwoven-classes.directory}" />
                                        <mkdir dir="${tft.project.build.unwoven-test-classes.directory}" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>aspectj-maven-plugin</artifactId>
                        <configuration>
                            <Xlint>ignore</Xlint>
                            <source>${tft.javac.source}</source>
                            <complianceLevel>${tft.javac.source}</complianceLevel>
                            <target>${tft.javac.target}</target>
                            <!-- Prevent ajc from finding sources -->
                            <sources />
                            <testSources />
                            <!-- This is important because sometimes the plugin decides that there's nothing to do
                                 because sources are not specified -->
                            <forceAjcCompile>true</forceAjcCompile>
                            <showWeaveInfo>${tft.aspectj.ajc.verbose}</showWeaveInfo>
                            <verbose>${tft.aspectj.ajc.verbose}</verbose>
                            <aspectLibraries>
                                <dependency>
                                    <groupId>org.springframework</groupId>
                                    <artifactId>spring-aspects</artifactId>
                                </dependency>
                            </aspectLibraries>
                        </configuration>
                        <executions>
                            <execution>
                                <id>weave-classes</id>
                                <phase>process-classes</phase>
                                <goals>
                                    <goal>compile</goal>
                                </goals>
                                <configuration>
                                    <weaveDirectories>
                                        <weaveDirectory>${tft.project.build.unwoven-classes.directory}</weaveDirectory>
                                    </weaveDirectories>
                                </configuration>
                            </execution>
                            <execution>
                                <id>weave-test-classes</id>
                                <phase>process-test-classes</phase>
                                <goals>
                                    <goal>test-compile</goal>
                                </goals>
                                <configuration>
                                    <weaveDirectories>
                                        <weaveDirectory>${tft.project.build.unwoven-test-classes.directory}</weaveDirectory>
                                    </weaveDirectories>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>org.aspectj</groupId>
                                <artifactId>aspectjweaver</artifactId>
                                <version>${tft.aspectjrt.version}</version>
                            </dependency>
                            <dependency>
                                <groupId>org.aspectj</groupId>
                                <artifactId>aspectjtools</artifactId>
                                <version>${tft.aspectjrt.version}</version>
                            </dependency>
                            <!-- Fix for JDK 9 and later - should be unnecessary when version 1.11.1 is released. -->
<!--                            <dependency>-->
<!--                                <groupId>com.sun</groupId>-->
<!--                                <artifactId>tools</artifactId>-->
<!--                                <version>${java.version}</version>-->
<!--                                <scope>system</scope>-->
<!--                                <systemPath>${project.basedir}/pom.xml</systemPath>-->
<!--                            </dependency>-->
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                    <exclusions>
                        <exclusion>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-test</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
        </profile>
        <!--====================================================================================================================================================

        This profile compiles custom Vaadin widgets into GWT components.

        =====================================================================================================================================================-->
        <profile>
            <id>vaadin-compile-widgetset</id>
            <build>
                <plugins>
                    <!-- Compile custom GWT components or widget dependencies with the GWT compiler -->
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>gwt-maven-plugin</artifactId>
                        <configuration>
                            <webappDirectory>src/main/webapp/VAADIN/widgetsets</webappDirectory>
                            <extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
                            <runTarget>${project.artifactId}</runTarget>
                            <soyc>false</soyc>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>compile</goal>
                                </goals>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>com.google.gwt</groupId>
                                <artifactId>gwt-dev</artifactId>
                                <version>${tft.gwt.version}</version>
                            </dependency>
                            <dependency>
                                <groupId>com.google.gwt</groupId>
                                <artifactId>gwt-user</artifactId>
                                <version>${tft.gwt.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile runs an application with the JavaFX runtime properly configured as Java9 modules.

        =====================================================================================================================================================-->
        <profile>
            <id>javafx-run</id>
            <build>
                <defaultGoal>exec:exec@javafx-run</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>javafx-run</id>
                                <configuration>
                                    <executable>java</executable>
                                    <arguments>
                                        <argument>--module-path</argument>
                                        <argument>ignored</argument> <!-- FIXME: it seems the plugin "eats" this argument -->
                                        <classpath />
                                        <argument>--add-modules</argument>
                                        <argument>ALL-MODULE-PATH</argument>
                                        <argument>-m</argument>
                                        <argument>${tft.mainClass}</argument>
                                    </arguments>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile prepares some stuff for the profiles it.tidalwave-javafx-appbundle-embedded-v2-jdk11, it.tidalwave-javafx-appbundle-embedded-v2-jdk17
        and it.tidalwave-javafx-appbundle-embedded-v2-jdk21. It copies all dependent libraries in target/app/lib  and downloads a Java runtime to embed. The
        coordinates of the artifact are defined in the following properties:

            + tft.embedded-jre.groupId
            + tft.embedded-jre.artifactId
            + tft.embedded-jre.version
            + tft.embedded-jre.type
            + tft.embedded-jre.classifier.macos.x64
            + tft.embedded-jre.classifier.macos.aarch64

        The properties are pre-populated, but can be overridden.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-javafx-appbundle-embedded-v2-prepare</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v2-profile</exists>
                </file>
            </activation>
            <properties>
                <tft.appbundle.build.logLevel>info</tft.appbundle.build.logLevel>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>unpack-embedded-jre-intel</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>${tft.embedded-jre.groupId}</groupId>
                                            <artifactId>${tft.embedded-jre.artifactId}</artifactId>
                                            <version>${tft.embedded-jre.version}</version>
                                            <type>${tft.embedded-jre.type}</type>
                                            <classifier>${tft.embedded-jre.classifier.macos.x64}</classifier>
                                            <overWrite>true</overWrite>
                                            <outputDirectory>${project.build.directory}/jre/intel/${tft.embedded-jre.name}</outputDirectory>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                            <execution>
                                <id>unpack-embedded-jre-arm</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>${tft.embedded-jre.groupId}</groupId>
                                            <artifactId>${tft.embedded-jre.artifactId}</artifactId>
                                            <version>${tft.embedded-jre.version}</version>
                                            <type>${tft.embedded-jre.type}</type>
                                            <classifier>${tft.embedded-jre.classifier.macos.aarch64}</classifier>
                                            <overWrite>true</overWrite>
                                            <outputDirectory>${project.build.directory}/jre/arm/${tft.embedded-jre.name}</outputDirectory>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                            <execution>
                                <id>copy-jars</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>copy-dependencies</goal>
                                </goals>
                                <configuration>
                                    <excludeTransitive>false</excludeTransitive>
                                    <includeScope>runtime</includeScope>
                                    <outputDirectory>${project.build.directory}/app/lib</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile creates the DMG package out of a macOS application bundle that has been previously created. It is performed as the finalisation of
        profiles it.tidalwave-javafx-appbundle-embedded-v2-jdk11 and it.tidalwave-javafx-appbundle-embedded-v2-jdk15. It doesn't rely on JDK tools since they
        are macOS dependent; it supports also Linux builds by using genisoimage in place of hdiutil.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-javafx-appbundle-embedded-v2-create-dmg</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v2-profile</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-dmg</id>
                                <phase>pre-integration-test</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target xmlns:if="ant:if" xmlns:unless="ant:unless">
                                        <echo level="${tft.appbundle.build.logLevel}">Cleaning...</echo>
                                        <delete file="${project.build.directory}/${tft.appbundle.name}-intel.dmg" verbose="false" failonerror="true" />
                                        <delete file="${project.build.directory}/${tft.appbundle.name}-intel.dmg.gz" verbose="false" failonerror="true" />
                                        <delete file="${project.build.directory}/${tft.appbundle.name}-arm.dmg" verbose="false" failonerror="true" />
                                        <delete file="${project.build.directory}/${tft.appbundle.name}-arm.dmg.gz" verbose="false" failonerror="true" />
                                        <echo level="${tft.appbundle.build.logLevel}">Creating Intel image...</echo>
                                        <exec dir="${project.build.directory}" os="Mac OS X" executable="hdiutil" failonerror="true">
                                            <arg value="create" />
                                            <arg value="-noanyowners" />
                                            <arg value="-imagekey" />
                                            <arg value="zlib-level=1" />
                                            <arg value="-srcfolder" />
                                            <arg value="intel/${tft.appbundle.name}.app" />
                                            <arg value="${tft.appbundle.name}-intel.dmg" />
                                        </exec>
                                        <echo level="${tft.appbundle.build.logLevel}">Creating ARM image...</echo>
                                        <exec dir="${project.build.directory}" os="Mac OS X" executable="hdiutil" failonerror="true">
                                            <arg value="create" />
                                            <arg value="-noanyowners" />
                                            <arg value="-imagekey" />
                                            <arg value="zlib-level=1" />
                                            <arg value="-srcfolder" />
                                            <arg value="arm/${tft.appbundle.name}.app" />
                                            <arg value="${tft.appbundle.name}-arm.dmg" />
                                        </exec>
                                        <echo level="${tft.appbundle.build.logLevel}">Creating Intel dmg...</echo>
                                        <exec dir="${project.build.directory}" os="Linux" executable="${tft.genisoimage}" failonerror="true">
                                            <arg value="-V" />
                                            <arg value="${tft.appbundle.name}" />
                                            <arg value="-U" />
                                            <arg value="-f" />
                                            <arg value="-D" />
                                            <arg value="-l" />
                                            <arg value="-L" />
                                            <arg value="-allow-multidot" />
                                            <arg value="-max-iso9660-filenames" />
                                            <arg value="-relaxed-filenames" />
                                            <arg value="-no-iso-translate" />
                                            <arg value="-r" />
                                            <arg value="-o" />
                                            <arg value="${tft.appbundle.name}-intel.dmg" />
                                            <arg value="-root" />
                                            <arg value="${tft.appbundle.name}-intel.app" />
                                            <arg value="${tft.appbundle.name}-intel.app" />
                                        </exec>
                                        <echo level="${tft.appbundle.build.logLevel}">Creating ARM dmg...</echo>
                                        <exec dir="${project.build.directory}" os="Linux" executable="${tft.genisoimage}" failonerror="true">
                                            <arg value="-V" />
                                            <arg value="${tft.appbundle.name}" />
                                            <arg value="-U" />
                                            <arg value="-f" />
                                            <arg value="-D" />
                                            <arg value="-l" />
                                            <arg value="-L" />
                                            <arg value="-allow-multidot" />
                                            <arg value="-max-iso9660-filenames" />
                                            <arg value="-relaxed-filenames" />
                                            <arg value="-no-iso-translate" />
                                            <arg value="-r" />
                                            <arg value="-o" />
                                            <arg value="${tft.appbundle.name}-arm.dmg" />
                                            <arg value="-root" />
                                            <arg value="${tft.appbundle.name}-arm.app" />
                                            <arg value="${tft.appbundle.name}-arm.app" />
                                        </exec>
                                        <echo level="${tft.appbundle.build.logLevel}">Compressing Intel dmg...</echo>
                                        <gzip src="${project.build.directory}/${tft.appbundle.name}-intel.dmg" destfile="${project.build.directory}/${tft.appbundle.name}-intel.dmg.gz" />
                                        <echo level="${tft.appbundle.build.logLevel}">Compressing ARM dmg...</echo>
                                        <gzip src="${project.build.directory}/${tft.appbundle.name}-arm.dmg" destfile="${project.build.directory}/${tft.appbundle.name}-arm.dmg.gz" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-app-bundle</id>
                                <phase>pre-integration-test</phase>
                                <goals>
                                    <goal>attach-artifact</goal>
                                </goals>
                                <configuration>
                                    <artifacts>
                                        <artifact>
                                            <file>${project.build.directory}/${tft.appbundle.name}-intel.dmg.gz</file>
                                            <type>intel.dmg.gz</type>
                                            <classifier>executable</classifier>
                                        </artifact>
                                        <artifact>
                                            <file>${project.build.directory}/${tft.appbundle.name}-arm.dmg.gz</file>
                                            <type>arm.dmg.gz</type>
                                            <classifier>executable</classifier>
                                        </artifact>
                                    </artifacts>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile creates a macOS application bundle using the jpackage utility in OpenJDK 17.
        See the documentation of profile it.tidalwave-javafx-appbundle-embedded-v2-prepare for more information.

        Create an empty file src/config/activate-it.tidalwave-javafx-embedded-appbundle-v2-profile to activate this profile.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-javafx-appbundle-embedded-v2-jdk11</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v2-profile</exists>
                </file>
                <jdk>[11,12)</jdk>
            </activation>
            <properties>
                <tft.embedded-jre.version>${tft.embedded-jre11.version}</tft.embedded-jre.version>
                <tft.embedded-jre.name>${tft.embedded-jre11.name}</tft.embedded-jre.name>
                <tft.embedded-jre.prefix>${tft.embedded-jre11.prefix}</tft.embedded-jre.prefix>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile creates a macOS application bundle using the jpackage utility in OpenJDK 17.
        See the documentation of profile it.tidalwave-javafx-appbundle-embedded-v2-prepare for more information.

        Create an empty file src/config/activate-it.tidalwave-javafx-embedded-appbundle-v2-profile to activate this profile.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-javafx-appbundle-embedded-v2-jdk17</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v2-profile</exists>
                </file>
                <jdk>[17,18)</jdk>
            </activation>
            <properties>
                <tft.embedded-jre.version>${tft.embedded-jre17.version}</tft.embedded-jre.version>
                <tft.embedded-jre.name>${tft.embedded-jre17.name}</tft.embedded-jre.name>
                <tft.embedded-jre.prefix>${tft.embedded-jre17.prefix}</tft.embedded-jre.prefix>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile creates a macOS application bundle using the jpackage utility in OpenJDK 21.
        See the documentation of profile it.tidalwave-javafx-appbundle-embedded-v2-prepare for more information.

        Create an empty file src/config/activate-it.tidalwave-javafx-embedded-appbundle-v2-profile to activate this profile.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-javafx-appbundle-embedded-v2-jdk21</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v2-profile</exists>
                </file>
                <jdk>[21,22)</jdk>
            </activation>
            <properties>
                <tft.embedded-jre.version>${tft.embedded-jre21.version}</tft.embedded-jre.version>
                <tft.embedded-jre.name>${tft.embedded-jre21.name}</tft.embedded-jre.name>
                <tft.embedded-jre.prefix>${tft.embedded-jre21.prefix}</tft.embedded-jre.prefix>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile creates a macOS application bundle using the jpackage utility in OpenJDK 11, 17 and 21.
        See the documentation of profile it.tidalwave-javafx-appbundle-embedded-v2-prepare for more information.

        Create an empty file src/config/activate-it.tidalwave-javafx-embedded-appbundle-v2-profile to activate this profile.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-javafx-appbundle-embedded-v2-jdk11-17-21</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v2-profile</exists>
                </file>
                <jdk>[11,22)</jdk>
            </activation>
            <properties>
                <tft.appbundle.build.logLevel>info</tft.appbundle.build.logLevel>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-app-bundle</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <loadresource property="tft.bundle.build.version">
                                            <propertyresource name="project.version" />
                                            <filterchain>
                                                <tokenfilter>
                                                    <filetokenizer />
                                                    <replaceregex pattern="[A-Z]+" replace="" flags="g" />
                                                    <replaceregex pattern="-+" replace="-" flags="g" />
                                                    <replaceregex pattern="-$" replace="" flags="g" />
                                                    <replaceregex pattern="-" replace="." flags="g" />
                                                </tokenfilter>
                                            </filterchain>
                                        </loadresource>
                                        <echo level="${tft.appbundle.build.logLevel}">CFBundleVersion: ${tft.bundle.build.version}</echo>
                                        <delete dir="${project.build.directory}/intel" verbose="false" failonerror="true" />
                                        <echo level="${tft.appbundle.build.logLevel}">Creating Intel app bundle in ${project.build.directory}/intel ...</echo>
                                        <exec dir="${pom.basedir}" executable="${tft.tool.jpackage}" failonerror="true">
                                            <arg value="--name" />
                                            <arg value="${tft.appbundle.name}" />
                                            <arg value="--icon" />
                                            <arg value="src/main/app-resources/${tft.appbundle.name}.icns" />
                                            <arg value="--app-version" />
                                            <arg value="${tft.bundle.build.version}" />
                                            <arg value="--mac-package-identifier" />
                                            <arg value="${project.groupId}.${project.artifactId}.${project.version}" />
                                            <arg value="--copyright" />
                                            <arg value="Copyright (C) by ${project.organization.name}" />
                                            <arg value="--vendor" />
                                            <arg value="${project.organization.name}" />
                                            <arg value="--dest" />
                                            <arg value="${project.build.directory}/intel" />
                                            <arg value="--type" />
                                            <arg value="app-image" />
                                            <arg value="--runtime-image" />
                                            <arg value="${project.build.directory}/jre/intel/${tft.embedded-jre.name}/${tft.embedded-jre.prefix}/Contents/Home" />
                                            <arg value="--input" />
                                            <arg value="${project.build.directory}/app" />
                                            <arg value="--module-path" />
                                            <arg value="${project.build.directory}/app/lib" />
                                            <arg value="--module" />
                                            <arg value="${tft.mainModule}/${tft.mainClass}" />
                                            <arg value="--java-options" />
                                            <arg value="--module-path $APPDIR/lib" />
                                            <arg value="--java-options" />
                                            <arg value="--add-modules ALL-MODULE-PATH" />
                                        </exec>
                                        <delete dir="${project.build.directory}/arm" verbose="false" failonerror="true" />
                                        <echo level="${tft.appbundle.build.logLevel}">Creating ARM app bundle in ${project.build.directory}/arm ...</echo>
                                        <exec dir="${pom.basedir}" executable="${tft.tool.jpackage}" failonerror="true">
                                            <arg value="--name" />
                                            <arg value="${tft.appbundle.name}" />
                                            <arg value="--icon" />
                                            <arg value="src/main/app-resources/${tft.appbundle.name}.icns" />
                                            <arg value="--app-version" />
                                            <arg value="${tft.bundle.build.version}" />
                                            <arg value="--mac-package-identifier" />
                                            <arg value="${project.groupId}.${project.artifactId}.${project.version}" />
                                            <arg value="--copyright" />
                                            <arg value="Copyright (C) by ${project.organization.name}" />
                                            <arg value="--vendor" />
                                            <arg value="${project.organization.name}" />
                                            <arg value="--dest" />
                                            <arg value="${project.build.directory}/arm" />
                                            <arg value="--type" />
                                            <arg value="app-image" />
                                            <arg value="--runtime-image" />
                                            <arg value="${project.build.directory}/jre/arm/${tft.embedded-jre.name}/${tft.embedded-jre.prefix}/Contents/Home" />
                                            <arg value="--input" />
                                            <arg value="${project.build.directory}/app" />
                                            <arg value="--module-path" />
                                            <arg value="${project.build.directory}/app/lib" />
                                            <arg value="--module" />
                                            <arg value="${tft.mainModule}/${tft.mainClass}" />
                                            <arg value="--java-options" />
                                            <arg value="--module-path $APPDIR/lib" />
                                            <arg value="--java-options" />
                                            <arg value="--add-modules ALL-MODULE-PATH" />
                                        </exec>
                                        <!-- signature="${tft.appbundle.signature}" ? -->
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile enables the management of web resources under src/main/webapp, used for applications with embedded web servers.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-webresources-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-webresources-v1-profile</exists>
                </file>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/webapp</directory>
                        <targetPath>webapp</targetPath>
                        <filtering>true</filtering>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </resources>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile builds a tar.gz assembly if it founds it descriptor at src/main/assembly/tar.gz.xml.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-assembly-tar.gz-v1</id>
            <activation>
                <file>
                    <exists>src/main/assembly/tar.gz.xml</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <configuration>
                            <descriptors combine.children="append">
                                <descriptor>src/main/assembly/tar.gz.xml</descriptor>
                            </descriptors>
                            <runOnlyAtExecutionRoot>false</runOnlyAtExecutionRoot>
                        </configuration>
                        <executions>
                            <execution>
                                <id>make-assembly</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile builds a zip assembly if it founds it descriptor at src/main/assembly/zip.xml.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-assembly-zip-v1</id>
            <activation>
                <file>
                    <exists>src/main/assembly/zip.xml</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <configuration>
                            <descriptors combine.children="append">
                                <descriptor>src/main/assembly/zip.xml</descriptor>
                            </descriptors>
                            <runOnlyAtExecutionRoot>false</runOnlyAtExecutionRoot>
                        </configuration>
                        <executions>
                            <execution>
                                <id>make-assembly</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile prepares the files for an installer, by copying all the jar dependencies to 'dist/lib' and the local resources to 'dist'.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-distribution-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-distribution-v1-profile</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>copy-resources</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${project.build.directory}/dist</outputDirectory>
                                    <resources>
                                        <resource>
                                            <directory>src/main/resources</directory>
                                            <filtering>true</filtering>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>copy-jars</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>copy-dependencies</goal>
                                </goals>
                                <configuration>
                                    <excludeTransitive>false</excludeTransitive>
                                    <excludeGroupIds>org.openjfx</excludeGroupIds>
                                    <includeScope>runtime</includeScope>
                                    <outputDirectory>${project.build.directory}/dist/lib</outputDirectory>
                                </configuration>
                            </execution>
                            <execution>
                                <id>copy-modules</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>copy-dependencies</goal>
                                </goals>
                                <configuration>
                                    <excludeTransitive>false</excludeTransitive>
                                    <includeGroupIds>org.openjfx</includeGroupIds>
                                    <includeScope>runtime</includeScope>
                                    <outputDirectory>${project.build.directory}/dist/mods</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile is the base configuration for creating a deb package It must be activated by creating the file
        'src/config/activate-it.tidalwave-deb-v1-profile'.

        The product name must be defined in

        * tft.deb.name

        and will be installed to ${tft.deb.binaryDirectory}/${tft.deb.name}.

        The files to be placed in the installer are extracted from a tarball defined by:

        * tft.deb.sourceTarball.groupId (defaults to ${project.id})
        * tft.deb.sourceTarball.artifactId
        * tft.deb.sourceTarball.version (defaults to ${project.version})
        * tft.deb.sourceTarball.classifier (defaults to 'bin')

        The binaries directory is speficied by:

        * tft.deb.binaryDirectory (defaults to /usr/lib)

        Files are packaged with uid/gid defined by

        * tft.deb.user (defaults to root)
        * tft.deb.group (defaults to root)

        This profile must be activated together with it.tidalwave-deb-service-v1 or it.tidalwave-deb-application-v1.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-deb-base-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-deb-v1-profile</exists>
                </file>
            </activation>
            <properties>
                <tft.deb.sourceTarball.groupId>${project.groupId}</tft.deb.sourceTarball.groupId>
                <tft.deb.sourceTarball.version>${project.version}</tft.deb.sourceTarball.version>
                <tft.deb.sourceTarball.classifier>bin</tft.deb.sourceTarball.classifier>
                <tft.deb.binaryDirectory>/usr/lib</tft.deb.binaryDirectory>
                <tft.deb.user>root</tft.deb.user>
                <tft.deb.group>root</tft.deb.group>
            </properties>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>copy-dependencies</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>copy</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>${tft.deb.sourceTarball.groupId}</groupId>
                                            <artifactId>${tft.deb.sourceTarball.artifactId}</artifactId>
                                            <version>${tft.deb.sourceTarball.version}</version>
                                            <classifier>${tft.deb.sourceTarball.classifier}</classifier>
                                            <type>tar.gz</type>
                                            <overWrite>true</overWrite>
                                            <outputDirectory>${project.build.directory}</outputDirectory>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.vafer</groupId>
                        <artifactId>jdeb</artifactId>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jdeb</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <!-- TODO: copyright? -->
                            <dataSet combine.children="append">
                                <data>
                                    <type>archive</type>
                                    <src>
                                        ${project.build.directory}/${tft.deb.sourceTarball.artifactId}-${tft.deb.sourceTarball.version}-${tft.deb.sourceTarball.classifier}.tar.gz
                                    </src>
                                    <mapper>
                                        <type>perm</type>
                                        <prefix>${tft.deb.binaryDirectory}</prefix>
                                        <user>${tft.deb.user}</user>
                                        <group>${tft.deb.group}</group>
                                        <!-- no permissions, preserved those in the tarball -->
                                    </mapper>
                                </data>
                                <data>
                                    <type>link</type>
                                    <linkName>${tft.deb.binaryDirectory}/${tft.deb.name}</linkName>
                                    <linkTarget>${tft.deb.binaryDirectory}/${tft.deb.name}-${project.version}</linkTarget>
                                    <symlink>true</symlink>
                                    <mapper>
                                        <type>perm</type>
                                        <user>${tft.deb.user}</user>
                                        <group>${tft.deb.group}</group>
                                    </mapper>
                                </data>
                            </dataSet>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile completes the configuration for creating a deb package for a service. It must be activated by creating the file
        'src/config/activate-it.tidalwave-deb-service-v1-profile'.

        The deb package will have all the required stuff under /etc/systemd/system to automatically start the service.

        Furthermore the following working directories will be created:

        * /var/lib/${tft.deb.directory}
        * /var/log/${tft.deb.directory}
        * /var/cache/${tft.deb.directory}

        The value of tft.deb.directory defaults to ${tft.deb.name}.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-deb-service-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-deb-service-v1-profile</exists>
                </file>
            </activation>
            <properties>
                <tft.deb.directory>${tft.deb.name}</tft.deb.directory>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.vafer</groupId>
                        <artifactId>jdeb</artifactId>
                        <configuration>
                            <dataSet combine.children="append">
                                <data>
                                    <type>file</type>
                                    <src>${project.build.directory}/classes/${tft.deb.name}.service</src>
                                    <dst>/etc/systemd/system/${tft.deb.name}.service</dst>
                                    <mapper>
                                        <type>perm</type>
                                        <user>${tft.deb.user}</user>
                                        <group>${tft.deb.group}</group>
                                    </mapper>
                                </data>
                                <data>
                                    <type>template</type>
                                    <paths>
                                        <path>/var/lib/${tft.deb.directory}</path>
                                        <path>/var/log/${tft.deb.directory}</path>
                                        <path>/var/cache/${tft.deb.directory}</path>
                                    </paths>
                                    <mapper>
                                        <type>perm</type>
                                        <user>${tft.deb.user}</user>
                                        <group>${tft.deb.group}</group>
                                    </mapper>
                                </data>
                                <!-- FIXME: take it from the tarball? -->
                                <data>
                                    <type>directory</type>
                                    <src>${project.build.directory}/classes/config</src>
                                    <includes>**/*</includes>
                                    <mapper>
                                        <prefix>/var/lib/${tft.deb.directory}/config</prefix>
                                        <type>perm</type>
                                        <user>${tft.deb.user}</user>
                                        <group>${tft.deb.group}</group>
                                    </mapper>
                                </data>
                            </dataSet>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile completes the configuration for creating a deb package for an application It must be activated by creating the file
        'src/config/activate-it.tidalwave-deb-application-v1-profile'.

        The deb package will have an executable alias under /usr/bin.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-deb-application-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-deb-application-v1-profile</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.vafer</groupId>
                        <artifactId>jdeb</artifactId>
                        <configuration>
                            <dataSet combine.children="append">
                                <data>
                                    <type>link</type>
                                    <linkName>/usr/bin/${tft.deb.name}</linkName>
                                    <linkTarget>${tft.deb.binaryDirectory}/${tft.deb.name}/bin/${tft.deb.name}</linkTarget>
                                    <symlink>true</symlink>
                                    <mapper>
                                        <type>perm</type>
                                        <user>${tft.deb.user}</user>
                                        <group>${tft.deb.group}</group>
                                        <dirmode>755</dirmode>
                                        <filemode>644</filemode>
                                    </mapper>
                                </data>
                            </dataSet>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================



        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave.deb-sign</id>
            <activation>
                <property>
                    <name>gpg.keyname</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.vafer</groupId>
                        <artifactId>jdeb</artifactId>
                        <configuration>
                            <signPackage>true</signPackage>
                            <signMethod>dpkg-sig</signMethod>
                            <signRole>origin</signRole>
                            <key>${gpg.keyname}</key>
                            <passphrase>${gpg.passphrase}</passphrase>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================



        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave.use-local-artifact-target-repo-v1</id>
            <properties>
                <altDeploymentRepository>local-repo::default::${staging.mvn.repo.url}</altDeploymentRepository>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        Deploys to a public repo those artifacts that have been generated during a release process and stored in a local repository. Run as:

        mvn -N -Pit.tidalwave.publish-artifacts-v1

        Note: on Mac OS X you need to run this with -Djava.io.tmpdir=/tmp (or other directory).

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave.publish-artifacts-v1</id>
            <properties>
                <wagon.source>${staging.mvn.repo.url}</wagon.source>
                <wagon.target>https://oss.sonatype.org/content/repositories/snapshots</wagon.target>
                <wagon.targetId>snapshots-oss.sonatype.org</wagon.targetId>
            </properties>
            <build>
                <defaultGoal>initialize org.codehaus.mojo:wagon-maven-plugin:copy</defaultGoal>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile updates all the dependencies to their latest release. The project must be structured in the standard TheseFoolishThings layout. Run as:

        mvn -N -Pit.tidalwave-update-releases-v1

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-update-releases-v1</id>
            <build>
                <defaultGoal>initialize</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>versions-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>update-properties</goal>
                                </goals>
                                <configuration>
                                    <allowSnapshots>false</allowSnapshots>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile updates all the dependencies to their latest snapshots. The project must be structured in the standard TheseFoolishThings layout. Run as:

        mvn -N -Pit.tidalwave-update-snapshots-v1

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-update-snapshots-v1</id>
            <build>
                <defaultGoal>initialize</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>versions-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>update-properties</goal>
                                </goals>
                                <configuration>
                                    <allowSnapshots>true</allowSnapshots>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile updates the headers of files.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-update-headers</id>
            <properties>
                <tft.license.template>${basedir}/target/it/tidalwave/license/filtered/tidalwave-header-description.ftl</tft.license.template>
            </properties>
            <build>
                <defaultGoal>initialize</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>it.tidalwave.thesefoolishthings</groupId>
                                            <artifactId>superpom-config</artifactId>
                                            <version>${tft.superpom.config.version}</version>
                                            <overWrite>true</overWrite>
                                            <outputDirectory>${basedir}/target/superpom-config</outputDirectory>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-resources-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${basedir}/target/it/tidalwave/license/filtered</outputDirectory>
                                    <resources>
                                        <resource>
                                            <directory>${basedir}/target/superpom-config/it/tidalwave/license</directory>
                                            <filtering>true</filtering>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>license-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>update-file-header</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile checks the headers of files.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-check-headers</id>
            <properties>
                <tft.license.template>${basedir}/target/it/tidalwave/license/filtered/tidalwave-header-description.ftl</tft.license.template>
            </properties>
            <build>
                <defaultGoal>initialize</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>it.tidalwave.thesefoolishthings</groupId>
                                            <artifactId>superpom-config</artifactId>
                                            <version>${tft.superpom.config.version}</version>
                                            <overWrite>true</overWrite>
                                            <outputDirectory>${basedir}/target/superpom-config</outputDirectory>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-resources-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${basedir}/target/it/tidalwave/license/filtered</outputDirectory>
                                    <resources>
                                        <resource>
                                            <directory>${basedir}/target/superpom-config/it/tidalwave/license</directory>
                                            <filtering>true</filtering>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>license-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>check-file-header</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile generates the README.md from the pom metadata.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-generate-readme-md-v1</id>
            <build>
                <defaultGoal>dependency:unpack resources:copy-resources</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>it.tidalwave.thesefoolishthings</groupId>
                                    <artifactId>superpom-config</artifactId>
                                    <version>${tft.superpom.config.version}</version>
                                    <type>jar</type>
                                    <overWrite>true</overWrite>
                                    <outputDirectory>${project.basedir}/target/superpom-resources</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-resources-plugin</artifactId>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>${project.basedir}/target/superpom-resources/it/tidalwave/readme/</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                            <outputDirectory>.</outputDirectory>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile applies the compiler property 'tft.javac.release' for Java 9 and later.

        =====================================================================================================================================================-->
        <profile>
            <id>javac-jdk9plus</id>
            <activation>
                <jdk>[9,)</jdk>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <release>${tft.javac.release}</release>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile properly configures the javadoc doclet for Java 9 and later.

        =====================================================================================================================================================-->
        <profile>
            <id>umldoclet-jdk9plus</id>
            <activation>
                <jdk>[9,)</jdk>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <!-- Configuration must be replicated in reporting section -->
                        <configuration>
                            <doclet>${tft.javadoc.doclet}</doclet>
                            <docletArtifact>
                                <groupId>${tft.javadoc.doclet.groupId}</groupId>
                                <artifactId>${tft.javadoc.doclet.artifactId}</artifactId>
                                <version>${tft.javadoc.doclet.version}</version>
                            </docletArtifact>
                            <additionalOptions>${tft.javadoc.doclet.additionalParam} ${tft.javadoc.doclint}</additionalOptions>
                            <useStandardDocletOptions>true</useStandardDocletOptions>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
            <reporting>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>${tft.maven-javadoc-plugin.version}</version>
                        <!-- Configuration must be replicated in build section -->
                        <configuration>
                            <doclet>${tft.javadoc.doclet}</doclet>
                            <docletArtifact>
                                <groupId>${tft.javadoc.doclet.groupId}</groupId>
                                <artifactId>${tft.javadoc.doclet.artifactId}</artifactId>
                                <version>${tft.javadoc.doclet.version}</version>
                            </docletArtifact>
                            <additionalOptions>${tft.javadoc.doclet.additionalParam} ${tft.javadoc.doclint}</additionalOptions>
                            <quiet>${tft.javadoc.quiet}</quiet>
                            <legacyMode>${tft.javadoc.legacyMode}</legacyMode>
                            <useStandardDocletOptions>true</useStandardDocletOptions>
                        </configuration>
                    </plugin>
                </plugins>
            </reporting>
        </profile>

        <!--====================================================================================================================================================

        This profile applies a warning suppressor for Java 21 and later.

        =====================================================================================================================================================-->
        <profile>
            <id>javac-jdk21plus</id>
            <activation>
                <jdk>[21,)</jdk>
            </activation>
            <properties>
                <tft.test.allowAttachSelf>-Djdk.attach.allowAttachSelf=true -XX:+EnableDynamicAgentLoading</tft.test.allowAttachSelf>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile activates the 'docs-maven-skin' option for rendering a site.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-site-docs-maven-skin-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-site-docs-maven-skin-v1-profile</exists>
                </file>
            </activation>
            <properties>
                <tft.site.skin.version>2.1.0</tft.site.skin.version>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-site-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>com.bernardomg.maven.skins</groupId>
                                <artifactId>docs-maven-skin</artifactId>
                                <version>${tft.site.skin.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile handles some m2e in Eclipse.
        This profile is automatically activated when building with Eclipse and m2e.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-m2e-lifecycle-mapping</id>
            <activation>
                <property>
                    <!-- Defined by Eclipse with m2e. -->
                    <name>m2e.version</name>
                </property>
            </activation>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.eclipse.m2e</groupId>
                            <artifactId>lifecycle-mapping</artifactId>
                            <version>${tft.m2e-lifecycle-mapping.version}</version>
                            <configuration>
                                <lifecycleMappingMetadata>
                                    <pluginExecutions>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>org.codehaus.mojo</groupId>
                                                <artifactId>aspectj-maven-plugin</artifactId>
                                                <versionRange>${tft.aspectj-maven-plugin.version}</versionRange>
                                                <goals>
                                                    <goal>compile</goal>
                                                    <goal>test-compile</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <execute>
                                                    <runOnIncremental>true</runOnIncremental>
                                                </execute>
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>org.apache.maven.plugins</groupId>
                                                <artifactId>maven-enforcer-plugin</artifactId>
                                                <versionRange>${tft.maven-enforcer-plugin.version}</versionRange>
                                                <goals>
                                                    <goal>enforce</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <ignore />
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>org.codehaus.mojo</groupId>
                                                <artifactId>jaxb2-maven-plugin
                                                </artifactId>
                                                <versionRange>${tft.jaxb2-maven-plugin.version}</versionRange>
                                                <goals>
                                                    <goal>xjc</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <execute>
                                                    <runOnIncremental>true</runOnIncremental>
                                                </execute>
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>org.codehaus.mojo</groupId>
                                                <artifactId>xml-maven-plugin</artifactId>
                                                <versionRange>${tft.xml-maven-plugin.version}</versionRange>
                                                <goals>
                                                    <goal>transform</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <execute>
                                                    <runOnIncremental>true</runOnIncremental>
                                                </execute>
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>org.apache.maven.plugins</groupId>
                                                <artifactId>maven-dependency-plugin</artifactId>
                                                <versionRange>${tft.maven-dependency-plugin.version}</versionRange>
                                                <goals>
                                                    <goal>unpack</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <execute>
                                                    <runOnIncremental>true</runOnIncremental>
                                                </execute>
                                            </action>
                                        </pluginExecution>
                                    </pluginExecutions>
                                </lifecycleMappingMetadata>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile repackage a spring-boot application in a single executable jar.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-spring-boot-single-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-spring-boot-single-v1</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <skip>${tft.spring-boot.skip}</skip>
                            <mainClass>${tft.mainClass}</mainClass>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>repackage</goal>
                                </goals>
                                <configuration>
                                    <classifier>${tft.spring-boot.repackage-classifier}</classifier>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile repackage a spring-boot application in a single native executable with GraalVM.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-spring-boot-native-v1</id>
            <activation>
                <file>
                    <exists>src/config/activate-it.tidalwave-spring-boot-native-v1</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.graalvm.buildtools</groupId>
                        <artifactId>native-maven-plugin</artifactId>
                        <configuration>
                            <skip>${tft.native.skip}</skip>
                            <mainClass>${tft.mainClass}</mainClass>
                            <imageName>${tft.native.name}</imageName>
                            <buildArgs>${tft.native.buildArgs}</buildArgs>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>compile-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile disables the native plugin when the JVM is not GraalVM.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-spring-boot-native-disabler</id>
            <activation>
                <file>
                    <missing>${env.JAVA_HOME}/bin/native-image</missing>
                </file>
            </activation>
            <properties>
                <tft.native.skip>true</tft.native.skip>
            </properties>
        </profile>

        <!--====================================================================================================================================================

        This profile produces a report about plugins that could be updated.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-display-plugin-updates</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>versions-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>initialize</phase>
                                <goals>
                                    <goal>display-plugin-updates</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--====================================================================================================================================================

        This profile adds OpenJFX Monocle to test dependencies and sets a few VM properties for Surefire so headless testing for OpenJFX is possible.

        =====================================================================================================================================================-->
        <profile>
            <id>it.tidalwave-monocle-profile-v1</id>
            <properties>
                <tft.openjfx-monocle.version>11.0.2</tft.openjfx-monocle.version>
                <tft.testfx-monocle.vmOptions>-Dtestfx.robot=glass -Dtestfx.headless=true -Dprism.order=sw</tft.testfx-monocle.vmOptions>
                <tft.test.vmOptions>${tft.testfx-monocle.vmOptions}</tft.test.vmOptions>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.testfx</groupId>
                    <artifactId>openjfx-monocle</artifactId>
                    <version>${tft.openjfx-monocle.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
    </profiles>

</project>
