Content of file superpom-5.0-ALPHA-7.pom

<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.0-ALPHA-7</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. (http://tidalwave.it)</name>
        <url>http://tidalwave.it</url>
    </organization>

    <developers>
        <developer>
            <name>Fabrizio Giudici</name>
            <email>fabrizio.giudici@tidalwave.it</email>
            <url>http://tidalwave.it/people/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://oss.sonatype.org</tft.staging-repo.url>
        <tft.staging-repo.id>staging-oss.sonatype.org</tft.staging-repo.id>

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

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

        <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:cpd pmd:pmd</tft.profile.metrics.pmdGoal>
        <tft.profile.metrics.sonarGoal>sonar:sonar</tft.profile.metrics.sonarGoal>
        <tft.profile.metrics.dependencyCheckGoal>dependency-check:aggregate</tft.profile.metrics.dependencyCheckGoal>
        <tft.profile.metrics.defaultGoal>
            clean install ${tft.profile.metrics.findbugsGoal} ${tft.profile.metrics.spotbugsGoal} ${tft.profile.metrics.pmdGoal}
            ${tft.profile.metrics.checkstyleGoal} dependency:analyze
            ${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.spotbugs.skip>${tft.findbugs.skip}</tft.spotbugs.skip>

        <tft.pmd.ruleset>/it/tidalwave/pmd/basic.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.6.0</tft.maven.requiredVersion>
        <tft.maven.requiredJdk>[1.8.0,)</tft.maven.requiredJdk>
        <tft.superpom.config.version>1.6</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>1.8</tft.javac.source>
        <tft.javac.target>1.8</tft.javac.target>
        <tft.javac.release />
        <!--<tft.javac.release>8</tft.javac.release>-->
        <tft.javac.xlint>-Xlint:all</tft.javac.xlint>
        <tft.javac.debug>true</tft.javac.debug>
        <tft.javac.optimize>true</tft.javac.optimize>
        <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>
        <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.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.description />

        <scm.repo.url />
        <scm.repo.readonly.url />
        <scm.repo.browse.url />

        <!-- Default dependency versions -->
        <tft.appbundler.version>1.0-patched</tft.appbundler.version>
        <tft.aspectjrt.version>1.9.6</tft.aspectjrt.version>
        <tft.hamcrest-matchers.version>1.3</tft.hamcrest-matchers.version>
        <tft.jsr330.version>1</tft.jsr330.version>
        <tft.javax-annotation.version>1.3.2</tft.javax-annotation.version>
        <tft.findbugs-annotations.version>3.1.9</tft.findbugs-annotations.version>
        <tft.junit.version>4.12</tft.junit.version>
        <tft.logback.version>1.2.3</tft.logback.version>
        <tft.lombok.version>1.18.18</tft.lombok.version>
        <tft.mockito.version>3.8.0</tft.mockito.version>
        <tft.slf4j.version>1.7.30</tft.slf4j.version>
        <tft.spring.version>4.3.0.RELEASE</tft.spring.version>
        <tft.testng.version>6.9.10</tft.testng.version>

        <!-- 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.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.embedded-jdk.groupId>it.tidalwave.jdk</tft.embedded-jdk.groupId>
        <tft.embedded-jdk.artifactId>adoptopenjdk-jre</tft.embedded-jdk.artifactId>
        <tft.embedded-jdk.version />
        <tft.embedded-jdk.type>tgz</tft.embedded-jdk.type>
        <tft.embedded-jdk.name />
        <tft.embedded-jdk.prefix />
        <tft.embedded-jdk.classifier.macos.x64>macosx-x64-hotspot</tft.embedded-jdk.classifier.macos.x64>

        <tft.appbundle.modules>javafx.base,javafx.controls,javafx.fxml,javafx.graphics</tft.appbundle.modules>
        <tft.appbundle.vmoptions />
        <tft.javafx.vmargs /> <!-- deprecated -->
        <tft.appbundle.name />
        <tft.appbundle.args>${tft.javafx.vmargs}</tft.appbundle.args>
        <tft.tool.jpackager>jpackager</tft.tool.jpackager>
        <tft.tool.jpackager.downloadUrl.macOS>http://download2.gluonhq.com/jpackager/11/jdk.packager-osx.zip</tft.tool.jpackager.downloadUrl.macOS>

        <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.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.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.version>2.0.12</tft.javadoc.doclet.version>
        <tft.javadoc.doclet.additionalParam>-verbose</tft.javadoc.doclet.additionalParam>

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

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

        <tft.maven-android-plugin.version>4.0.0</tft.maven-android-plugin.version>
        <tft.maven-antrun-plugin.version>3.0.0</tft.maven-antrun-plugin.version>
        <tft.maven-archetype-plugin.version>2.4</tft.maven-archetype-plugin.version>
        <tft.maven-assembly-plugin.version>3.3.0</tft.maven-assembly-plugin.version>
        <tft.maven-bundle-plugin.version>4.2.1</tft.maven-bundle-plugin.version>
        <tft.maven-checkstyle-plugin.version>3.0.0</tft.maven-checkstyle-plugin.version>
        <tft.maven-clean-plugin.version>3.1.0</tft.maven-clean-plugin.version>
        <tft.maven-compiler-plugin.version>3.8.1</tft.maven-compiler-plugin.version>
        <tft.maven-dependency-plugin.version>3.1.2</tft.maven-dependency-plugin.version>
        <tft.maven-deploy-plugin.version>3.0.0-M1</tft.maven-deploy-plugin.version>
        <tft.maven-doap-plugin.version>1.2</tft.maven-doap-plugin.version>
        <tft.maven-enforcer-plugin.version>3.0.0-M3</tft.maven-enforcer-plugin.version>
        <tft.maven-gpg-plugin.version>1.6</tft.maven-gpg-plugin.version>
        <tft.maven-graph-plugin.version>1.39</tft.maven-graph-plugin.version>
        <tft.maven-install-plugin.version>3.0.0-M1</tft.maven-install-plugin.version>
        <tft.maven-jar-plugin.version>3.2.0</tft.maven-jar-plugin.version>
        <tft.maven-jarsigner-plugin.version>3.0.0</tft.maven-jarsigner-plugin.version>
        <tft.maven-javadoc-plugin.version>3.2.0</tft.maven-javadoc-plugin.version>
        <tft.maven-jdeb-plugin.version>1.7</tft.maven-jdeb-plugin.version>
        <tft.maven-jetty-plugin.version>6.1.26</tft.maven-jetty-plugin.version> <!-- FIXME: 7.0.0.pre5 breaks current projects -->
        <tft.maven-license-plugin.version>1.10.b1</tft.maven-license-plugin.version>
        <tft.maven-pmd-plugin.version>3.14.0</tft.maven-pmd-plugin.version>
        <tft.maven-project-info-reports-plugin.version>3.1.1</tft.maven-project-info-reports-plugin.version>
        <tft.maven-release-plugin.version>3.0.0-M1</tft.maven-release-plugin.version>
        <tft.maven-replacer-plugin.version>1.5.3</tft.maven-replacer-plugin.version>
        <tft.maven-resources-plugin.version>3.2.0</tft.maven-resources-plugin.version>
        <tft.maven-scm-plugin.version>1.11.2</tft.maven-scm-plugin.version>
        <tft.maven-shade-plugin.version>3.2.4</tft.maven-shade-plugin.version>
        <tft.maven-site-plugin.version>3.9.1</tft.maven-site-plugin.version>
        <tft.maven-source-plugin.version>3.2.0</tft.maven-source-plugin.version>
        <tft.maven-surefire-plugin.version>3.0.0-M5</tft.maven-surefire-plugin.version>
        <tft.maven-surefire-report-plugin.version>3.0.0-M5</tft.maven-surefire-report-plugin.version>
        <tft.maven-war-plugin.version>3.3.1</tft.maven-war-plugin.version>

        <tft.aspectj-maven-plugin.version>1.11</tft.aspectj-maven-plugin.version>
        <tft.build-helper-maven-plugin.version>3.2.0</tft.build-helper-maven-plugin.version>
        <tft.buildnumber-maven-plugin.version>1.4</tft.buildnumber-maven-plugin.version>
        <!-- Beware of 6.1.2, with a performance regression: https://github.com/jeremylong/DependencyCheck/issues/3183 -->
        <tft.dependency-check-maven-plugin.version>6.1.1</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.9</tft.dockerfile-maven-plugin.version>
        <tft.exec-maven-plugin.version>3.0.0</tft.exec-maven-plugin.version>
        <tft.findbugs-maven-plugin.version>3.0.5</tft.findbugs-maven-plugin.version>
        <tft.gmaven-plugin.version>2.1.1</tft.gmaven-plugin.version>
        <tft.gwt-maven-plugin.version>2.8.2</tft.gwt-maven-plugin.version>
        <tft.jacoco-maven-plugin.version>0.8.6</tft.jacoco-maven-plugin.version>
        <tft.javafx-maven-plugin.version>0.0.5</tft.javafx-maven-plugin.version>
        <tft.jaxb2-maven-plugin.version>2.4</tft.jaxb2-maven-plugin.version>
        <tft.jaxws-maven-plugin.version>2.3</tft.jaxws-maven-plugin.version>
        <tft.license-maven-plugin.version>1.16</tft.license-maven-plugin.version>
        <tft.m2e-lifecycle-mapping.version>1.0.0</tft.m2e-lifecycle-mapping.version>
        <tft.nexus-staging-maven-plugin.version>1.6.8</tft.nexus-staging-maven-plugin.version>
        <tft.sonar-maven-plugin.version>3.8</tft.sonar-maven-plugin.version>
        <tft.spotbugs-maven-plugin.version>3.1.11</tft.spotbugs-maven-plugin.version>
        <tft.tomcat-maven-plugin.version>2.2</tft.tomcat-maven-plugin.version>
        <tft.vaadin-maven-plugin.version>12.0.2</tft.vaadin-maven-plugin.version>
        <tft.versions-maven-plugin.version>2.8.1</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.0.2</tft.xml-maven-plugin.version>

        <tft.archetype-packaging.version>${tft.maven-archetype-plugin.version}</tft.archetype-packaging.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.0-ALPHA-7</tag>
    </scm>

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

    <repositories>
        <repository>
            <id>snapshots-oss.sonatype.org</id>
            <name>Sonatype Snapshots Repository</name>
            <url>http://oss.sonatype.org/content/repositories/snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <distributionManagement>
        <site>
            <id>thesefoolishthings-superpom-site</id>
            <url>http://tidalwave.it/projects/superpom</url>
        </site>
        <repository>
            <id>staging-oss.sonatype.org</id>
            <name>Sonatype Release Repository</name>
            <url>${tft.staging-repo.url}/service/local/staging/deploy/maven2</url>
        </repository>
        <snapshotRepository>
            <id>snapshots-oss.sonatype.org</id>
            <name>Sonatype Snapshot Repository</name>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
    </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.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.gmaven</groupId>
                    <artifactId>gmaven-plugin</artifactId>
                    <version>${tft.gmaven-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.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.jayway.maven.plugins.android.generation2</groupId>
                    <artifactId>maven-android-plugin</artifactId>
                    <version>${tft.maven-android-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.google.code.maven-replacer-plugin</groupId>
                    <artifactId>maven-replacer-plugin</artifactId>
                    <version>${tft.maven-replacer-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>com.mycila.maven-license-plugin</groupId>
                    <artifactId>maven-license-plugin</artifactId>
                    <version>${tft.maven-license-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.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <version>${tft.maven-jetty-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.sonatype.plugins</groupId>
                    <artifactId>nexus-staging-maven-plugin</artifactId>
                    <version>${tft.nexus-staging-maven-plugin.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.jvnet.jax-ws-commons</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.openjfx</groupId>
                    <artifactId>javafx-maven-plugin</artifactId>
                    <version>${tft.javafx-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>
                    <optimize>${tft.javac.optimize}</optimize>
                    <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>
                    <compilerArgument>
                        ${tft.javac.xlint}
                    </compilerArgument>
                </configuration>
            </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>
                    <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}</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>
                    <spotbugsXmlOutput>true</spotbugsXmlOutput>
                    <spotbugsXmlOutputDirectory>target/site</spotbugsXmlOutputDirectory> <!-- FIXME: needed? -->
                    <skipEmptyReport>false</skipEmptyReport>
                    <effort>Max</effort>
                    <threshold>Low</threshold>
                    <failOnError>false</failOnError>
                    <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>
                    <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                    <minimumTokens>100</minimumTokens>
                    <targetJdk>${tft.javac.source}</targetJdk>
                    <skip>${tft.pmd.skip}</skip>
                    <skipEmptyReport>false</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>
                    <formats>
                        <format>xml</format>
                        <format>html</format>
                    </formats>
                </configuration>
            </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>@{project.version}</tagNameFormat>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <configuration>
                    <serverId>${tft.staging-repo.id}</serverId>
                    <nexusUrl>${tft.staging-repo.url}</nexusUrl>
                </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>
                                <!--<dependencyConvergence />-->
                            </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>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <configuration>
                    <mainClass>${tft.mainClass}</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>${tft.spring.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>${tft.aspectjrt.version}</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${tft.aspectjrt.version}</version>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${tft.slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${tft.slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jul-to-slf4j</artifactId>
                <version>${tft.slf4j.version}</version>
            </dependency>

            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>${tft.logback.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${tft.logback.version}</version>
            </dependency>

            <dependency>
                <groupId>javax.inject</groupId>
                <artifactId>javax.inject</artifactId>
                <version>${tft.jsr330.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
                <version>${tft.javax-annotation.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-annotations</artifactId>
                <version>${tft.findbugs-annotations.version}</version>
            </dependency>

            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${tft.lombok.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <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}</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>prepare-package</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 this 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? -->
needed? -->
<skipEmptyReport>false</skipEmptyReport> <effort>Max</effort> <threshold>Low</threshold> <failOnError>false</failOnError> <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> <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding> <minimumTokens>100</minimumTokens> <targetJdk>${tft.javac.source}</targetJdk> <skip>${tft.pmd.skip}</skip> <skipEmptyReport>false</skipEmptyReport> <rulesets> <ruleset>${tft.pmd.ruleset}</ruleset> </rulesets> </configuration> <reportSets> <reportSet> <reports> <!-- FIXME: can't reuse tft.profile.metrics.pmdGoal --> <report>pmd</report> <report>cpd</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> </configuration> <reportSets> <reportSet> <reports> <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> </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 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-jetty-profile to activate it. =====================================================================================================================================================--> <profile> <id>jetty</id> <activation> <file> <exists>src/config/activate-jetty-profile</exists> </file> </activation> <build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>${tft.jetty.port}</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> <stopPort>${tft.jetty.stopPort}</stopPort> <stopKey>${tft.jetty.stopKey}</stopKey> <scanIntervalSeconds>${tft.jetty.scanIntervalSeconds}</scanIntervalSeconds> <webAppConfig> <contextPath>${tft.webapp.contextPath}</contextPath> <baseResource implementation="org.mortbay.resource.ResourceCollection"> <!-- Workaround for Maven/Jetty issue http://jira.codehaus.org/browse/JETTY-680 --> <!-- <resources>src/main/webapp,${project.build.directory}/${project.build.finalName}</resources> --> <resourcesAsCSV>src/main/webapp,${project.build.directory}/${project.build.finalName}</resourcesAsCSV> </baseResource> </webAppConfig> </configuration> </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>aspectjrt</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>aspectjrt</artifactId> </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 creates a macOS application bundle with an embedded Java runtime with the tool jarbundler. This profile is DEPRECATED as different tools are used with JDK 11+. See the profile it.tidalwave-javafx-appbundle-embedded-v2. Create an empty file src/config/activate-it.tidalwave-javafx-embedded-appbundle-v1-profile to activate this profile. =====================================================================================================================================================--> <profile> <id>it.tidalwave-javafx-appbundle-embedded-v1</id> <activation> <file> <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v1-profile</exists> </file> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>unpack-embedded-jdk</id> <phase>generate-resources</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>${tft.embedded-jdk.groupId}</groupId> <artifactId>${tft.embedded-jdk.artifactId}</artifactId> <version>${tft.embedded-jdk.version}</version> <type>tgz</type> <classifier>${tft.embedded-jdk.classifier.macos.x64}</classifier> <overWrite>true</overWrite> <outputDirectory>${project.basedir}/target/jdk/${tft.embedded-jdk.name}</outputDirectory> </artifactItem> </artifactItems> </configuration> </execution> <execution> <id>copy-application</id> <phase>generate-resources</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <excludeTransitive>false</excludeTransitive> <excludeArtifactIds>javafx-embedded</excludeArtifactIds> <includeScope>runtime</includeScope> <outputDirectory>${project.build.directory}/application</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <id>create-app-bundle</id> <phase>pre-integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <target> <taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask" classpath="src/main/app-resources/appbundler-${tft.appbundler.version}.jar" /> <!-- FIXME applicationCategory="public.app-category.developer-tools"--> <bundleapp outputdirectory="${project.build.directory}" name="${tft.appbundle.name}" displayname="${tft.appbundle.name}" icon="src/main/app-resources/${tft.appbundle.name}.icns" identifier="${project.groupId}" shortversion="${project.version}" mainclassname="${tft.mainClass}" signature="${tft.appbundle.signature}"> <runtime dir="${project.build.directory}/jdk/${tft.embedded-jdk.name}/Contents/Home" /> <classpath dir="${project.basedir}" casesensitive="yes"> <include name="target/application/*.jar" /> </classpath> <options value="${tft.appbundle.args}" /> <option value="-Dcom.apple.mrj.application.apple.menu.about.name=${tft.appbundle.name}" /> <option value="-Xdock:name=${tft.appbundle.name}" /> <option value="-Xbootclasspath/a:$APP_ROOT/Contents/PlugIns/${tft.embedded-jdk.name}/Contents/Home/jre/lib/jfxrt.jar" /> </bundleapp> <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="${tft.appbundle.name}.app" /> <arg value="${tft.appbundle.name}.dmg" /> </exec> <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}.dmg" /> <arg value="-root" /> <arg value="${tft.appbundle.name}.app" /> <arg value="${tft.appbundle.name}.app" /> </exec> <gzip src="${project.build.directory}/${tft.appbundle.name}.dmg" destfile="${project.build.directory}/${tft.appbundle.name}.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}.dmg.gz</file> <type>dmg.gz</type> <classifier>executable</classifier> </artifact> </artifacts> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <!--==================================================================================================================================================== This profile creates a macOS application bundle with the tool jarbundler. This profile is DEPRECATED as it's common practice to embed a Java runtime with macOS applications. Create an empty file src/config/activate-it.tidalwave-javafx-appbundle-v1-profile to activate this profile. =====================================================================================================================================================--> <profile> <id>it.tidalwave-javafx-appbundle-v1</id> <activation> <file> <exists>src/config/activate-it.tidalwave-javafx-appbundle-v1-profile</exists> </file> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-application</id> <phase>generate-resources</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <excludeTransitive>false</excludeTransitive> <includeScope>runtime</includeScope> <!-- FIXME: workaround until we're able to put it in bootclasspath --> <!--<excludeArtifactIds>javafx-embedded</excludeArtifactIds>--> <outputDirectory>${project.build.directory}/application</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <id>create-app-bundle</id> <phase>pre-integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <target> <taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask" classpath="src/main/app-resources/appbundler-${tft.appbundler.version}.jar" /> <!-- FIXME applicationCategory="public.app-category.developer-tools"--> <!-- FIXME: way to specify min Java version? --> <bundleapp outputdirectory="${project.build.directory}" name="${tft.appbundle.name}" displayname="${tft.appbundle.name}" icon="src/main/app-resources/${tft.appbundle.name}.icns" identifier="${project.groupId}" shortversion="${project.version}" mainclassname="${tft.mainClass}" signature="${tft.appbundle.signature}"> <classpath dir="${project.basedir}" casesensitive="yes"> <include name="target/application/*.jar" /> </classpath> <options value="${tft.javafx.vmargs}" /> <option value="-Dcom.apple.mrj.application.apple.menu.about.name=${tft.appbundle.name}" /> <option value="-Xdock:name=${tft.appbundle.name}" /> </bundleapp> <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="${tft.appbundle.name}.app" /> <arg value="${tft.appbundle.name}.dmg" /> </exec> <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}.dmg" /> <arg value="-root" /> <arg value="${tft.appbundle.name}.app" /> <arg value="${tft.appbundle.name}.app" /> </exec> <gzip src="${project.build.directory}/${tft.appbundle.name}.dmg" destfile="${project.build.directory}/${tft.appbundle.name}.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}.dmg.gz</file> <type>dmg.gz</type> <classifier>executable</classifier> </artifact> </artifacts> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <!--==================================================================================================================================================== This profile prepares some stuff for the profiles it.tidalwave-javafx-appbundle-embedded-v2-jdk11 and it.tidalwave-javafx-appbundle-embedded-v2-jdk15. It copies all dependent libraries in target/app/lib and modules in target/app/mods and downloads a Java runtime to embed. The coordinates of the artifact are defined in the following properties: + tft.embedded-jdk.groupId + tft.embedded-jdk.artifactId + tft.embedded-jdk.version + tft.embedded-jdk.type + tft.embedded-jdk.classifier.macos.x64 The properties are properly populated when running with JDK 11 and JDK 15, 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-jdk</id> <phase>generate-resources</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>${tft.embedded-jdk.groupId}</groupId> <artifactId>${tft.embedded-jdk.artifactId}</artifactId> <version>${tft.embedded-jdk.version}</version> <type>${tft.embedded-jdk.type}</type> <classifier>${tft.embedded-jdk.classifier.macos.x64}</classifier> <overWrite>true</overWrite> <outputDirectory>${project.build.directory}/jdk/${tft.embedded-jdk.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> <excludeGroupIds>org.openjfx</excludeGroupIds> <includeScope>runtime</includeScope> <outputDirectory>${project.build.directory}/app/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> <outputDirectory>${project.build.directory}/app/mods</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}">Creating dmg...</echo> <delete file="${project.build.directory}/${tft.appbundle.name}.dmg" verbose="false" failonerror="true" /> <delete file="${project.build.directory}/${tft.appbundle.name}.dmg.gz" verbose="false" failonerror="true" /> <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="${tft.appbundle.name}.app" /> <arg value="${tft.appbundle.name}.dmg" /> </exec> <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}.dmg" /> <arg value="-root" /> <arg value="${tft.appbundle.name}.app" /> <arg value="${tft.appbundle.name}.app" /> </exec> <gzip src="${project.build.directory}/${tft.appbundle.name}.dmg" destfile="${project.build.directory}/${tft.appbundle.name}.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}.dmg.gz</file> <type>dmg.gz</type> <classifier>executable</classifier> </artifact> </artifacts> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <!--==================================================================================================================================================== This profile creates a macOS application bundle using the jpackager utility backported to JDK 11 (https://github.com/johanvos/openjdk-mobile11/tree/packager). Use the property tft.tool.jpackager to specify the path of the tool. If the tool is not found, an attempt to download it is performed from the URL defined by the property tft.tool.jpackager.downloadUrl.macOS. A different profile is automatically activated with JDK 15+ (see it.tidalwave-javafx-appbundle-embedded-v2-jdk15). 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> <jdk>[11,12)</jdk> <file> <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v2-profile</exists> </file> </activation> <properties> <tft.embedded-jdk.version>11.0.10_9</tft.embedded-jdk.version> <tft.embedded-jdk.name>11.0.10_9</tft.embedded-jdk.name> <tft.embedded-jdk.prefix>jdk-11.0.10+9-jre</tft.embedded-jdk.prefix> <tft.appbundle.build.logLevel>info</tft.appbundle.build.logLevel> <tft.bundle.build.version /> </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 xmlns:if="ant:if" xmlns:unless="ant:unless"> <available file="${tft.tool.jpackager}" type="file" property="tft.jpackager.present" /> <echo unless:set="tft.jpackager.present" level="warning">JDK 11 backport of jpackager not found - trying to download it... </echo> <echo unless:set="tft.jpackager.present" level="warning">To avoid download, please manually install the tool and set the property tft.tool.jpackager </echo> <get unless:set="tft.jpackager.present" src="${tft.tool.jpackager.downloadUrl.macOS}" dest="${project.build.directory}" /> <unzip unless:set="tft.jpackager.present" src="${project.build.directory}/jdk.packager-osx.zip" dest="${project.build.directory}/jpackager" /> <chmod unless:set="tft.jpackager.present" file="${project.build.directory}/jpackager/jpackager" perm="ugo+rx" /> <property unless:set="tft.jpackager.present" name="tft.tool.jpackager-actual" value="${project.build.directory}/jpackager/jpackager" /> <property if:set="tft.jpackager.present" name="tft.tool.jpackager-actual" value="${tft.tool.jpackager}" /> <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> <echo level="${tft.appbundle.build.logLevel}">Invoking ${tft.tool.jpackager-actual}...</echo> <exec dir="${pom.basedir}" executable="${tft.tool.jpackager-actual}" failonerror="true"> <arg value="create-image" /> <arg value="--output" /> <arg value="${project.build.directory}" /> <arg value="--runtime-image" /> <arg value="${project.build.directory}/jdk/${tft.embedded-jdk.name}/${tft.embedded-jdk.prefix}/Contents/Home" /> <arg value="--input" /> <arg value="${project.build.directory}/app/lib" /> <arg value="--name" /> <arg value="${tft.appbundle.name}" /> <arg value="--icon" /> <arg value="src/main/app-resources/${tft.appbundle.name}.icns" /> <arg value="--jvm-args" /> <arg value="--module-path mods --add-modules ${tft.appbundle.modules}" /> <arg value="--version" /> <arg value="${tft.bundle.build.version}" /> <arg value="--identifier" /> <arg value="${project.groupId}.${project.artifactId}" /> <arg value="--copyright" /> <arg value="Copyright (C) by ${project.organization.name}" /> <arg value="--vendor" /> <arg value="${project.organization.name}" /> <arg value="--main-jar" /> <arg value="${tft.mainPackage}" /> <arg value="--class" /> <arg value="${tft.mainClass}" /> <arg value="--verbose" /> </exec> <!-- signature="${tft.appbundle.signature}" ? --> <echo level="${tft.appbundle.build.logLevel}">Copying modules...</echo> <copy todir="${project.build.directory}/${tft.appbundle.name}.app/Contents/Java/mods"> <fileset dir="${project.build.directory}/app/mods" /> </copy> </target> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <!--==================================================================================================================================================== This profile creates a macOS application bundle using the jpackage utility in OpenJDK 15+. A different profile is activated with OpenJDK 11+ (see it.tidalwave-javafx-appbundle-embedded-v2-jdk11). 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-jdk15</id> <activation> <file> <exists>src/config/activate-it.tidalwave-javafx-appbundle-embedded-v2-profile</exists> </file> <jdk>[15,)</jdk> </activation> <properties> <tft.embedded-jdk.version>15.0.2_7</tft.embedded-jdk.version> <tft.embedded-jdk.name>15.0.2_7</tft.embedded-jdk.name> <tft.embedded-jdk.prefix>jdk-15.0.2+7-jre</tft.embedded-jdk.prefix> <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> <echo level="${tft.appbundle.build.logLevel}">Invoking jpackage...</echo> <exec dir="${pom.basedir}" executable="jpackage" failonerror="true"> <arg value="--dest" /> <arg value="${project.build.directory}" /> <arg value="--type" /> <arg value="app-image" /> <arg value="--runtime-image" /> <arg value="${project.build.directory}/jdk/${tft.embedded-jdk.name}/${tft.embedded-jdk.prefix}/Contents/Home" /> <arg value="--input" /> <arg value="${project.build.directory}/app" /> <arg value="--name" /> <arg value="${tft.appbundle.name}" /> <arg value="--icon" /> <arg value="src/main/app-resources/${tft.appbundle.name}.icns" /> <arg value="--java-options" /> <arg value="--add-modules ${tft.appbundle.modules}" /> <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="--main-jar" /> <arg value="lib/${tft.mainPackage}" /> <arg value="--main-class" /> <arg value="${tft.mainClass}" /> </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-dependencies</id> <phase>generate-resources</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <includeScope>runtime</includeScope> <!-- overWrite>true</overWrite --> <outputDirectory>${project.build.directory}/dist/lib</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> <useStandardDocletOptions>true</useStandardDocletOptions> </configuration> </plugin> </plugins> </reporting> </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.0.11</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 adds OpenJavaFX artifacts to dependency management when JDK 11 or above is used. =====================================================================================================================================================--> <profile> <id>it.tidalwave-javafx-v1</id> <activation> <jdk>[11,)</jdk> </activation> <properties> <tft.javafx.version>11.0.1</tft.javafx.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-base</artifactId> <version>${tft.javafx.version}</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>${tft.javafx.version}</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>${tft.javafx.version}</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-graphics</artifactId> <version>${tft.javafx.version}</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-swing</artifactId> <version>${tft.javafx.version}</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-swt</artifactId> <version>${tft.javafx.version}</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-web</artifactId> <version>${tft.javafx.version}</version> </dependency> </dependencies> </dependencyManagement> </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> </profiles> </project>