<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-15</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 & copy of plugin sections.
A number of profiles, that can be easily activated, are available for:
* Spring-AOP configuration;
* different kinds of Continuous Integration tasks, including a full run of QA tools such as JaCoCo, FindBugs, PMD, etc...
* deploying WARs and locally running them with Tomcat or Jetty;
* creating a Mac OS X bundle for JavaFX applications;
* creating .deb packages for both application and services;
* a customized release cycle, including all requirements for the Maven Central such as signing, with a 'transactional' behaviour
(all artifacts, both the DSCM and the Maven artifacts are prepared on the local disk, so they can be uploaded in a second moment);
Remember to customise it
------------------------
If you use it, please remember to change the ```description```,```url```, ```organization```, ```developers```, ```license```, etc...
to override those related to the development of this POM.
</description>
<organization>
<name>Tidalwave s.a.s.</name>
<url>http://tidalwave.it</url>
</organization>
<developers>
<developer>
<name>Fabrizio Giudici</name>
<email>fabrizio.giudici@tidalwave.it</email>
<url>http://tidalwave.it/fabrizio/</url>
<organization>Tidalwave s.a.s.</organization>
<organizationUrl>http://tidalwave.it</organizationUrl>
<roles>
<role>manager</role>
<role>developer</role>
</roles>
<timezone>+1</timezone>
</developer>
</developers>
<licenses>
<license>
<name>Apache-2.0</name>
<url>http://www.opensource.org/licenses/apache2.0.php</url>
<comments>Apache License 2.0</comments>
</license>
</licenses>
<issueManagement>
<system>Jira</system>
<url>http://services.tidalwave.it/jira/browse/SUP</url>
</issueManagement>
<ciManagement>
<system>hudson</system>
<url>http://services.tidalwave.it/ci/view/TheseFoolishThings_SuperPOM</url>
</ciManagement>
<properties>
<tft.project.description>TheseFoolishThings Super POM</tft.project.description>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<bundle.namespace>${project.groupId}.${project.artifactId}</bundle.namespace>
<staging.mvn.repo.url>file://${project.build.directory}/target-maven-repo</staging.mvn.repo.url>
<netbeans.checkstyle.format>true</netbeans.checkstyle.format>
<!-- Deprecated properties replaced by tft.* ones -->
<testFailureIgnore>false</testFailureIgnore> <!-- backward compatibility, to be dropped -->
<stableAPI>false</stableAPI>
<stableAPIVersion>(,${project.version})</stableAPIVersion>
<disableJavaDocs>false</disableJavaDocs>
<disableDeploy>false</disableDeploy>
<skipTests>false</skipTests>
<scm.repo.effective.url>${scm.repo.url}</scm.repo.effective.url>
<tft.staging-repo.url>https://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.spotbugs.effort>Max</tft.spotbugs.effort>
<tft.spotbugs.threshold>Low</tft.spotbugs.threshold>
<tft.spotbugs.failOnError>false</tft.spotbugs.failOnError>
<tft.spotbugs.relaxed>false</tft.spotbugs.relaxed>
<tft.spotbugs.maxHeap>512</tft.spotbugs.maxHeap>
<tft.spotbugs.maxAllowedViolations>0</tft.spotbugs.maxAllowedViolations>
<tft.pmd.ruleset>/it/tidalwave/pmd/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.8</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>
<tft.pmd.aggregate>false</tft.pmd.aggregate>
<tft.pmd.minimumTokens>100</tft.pmd.minimumTokens>
<tft.pmd.minimumPriority>5</tft.pmd.minimumPriority>
<tft.pmd.skipEmptyReport>false</tft.pmd.skipEmptyReport>
<tft.pmd.showPmdLog>false</tft.pmd.showPmdLog>
<tft.pmd.includeXmlInSite>true</tft.pmd.includeXmlInSite>
<pmd.skip>${tft.pmd.skip}</pmd.skip> <!-- TODO: <skip> in the plugin doesn't work -->
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.release.tagNameFormat>@{project.version}</tft.release.tagNameFormat>
<tft.description />
<scm.repo.url />
<scm.repo.readonly.url />
<scm.repo.browse.url />
<!-- Default test configuration. -->
<tft.test.skip>${skipTests}</tft.test.skip>
<tft.test.maxMemory>768M</tft.test.maxMemory>
<tft.test.reportsDirectory>${project.build.directory}/surefire-reports/plain</tft.test.reportsDirectory>
<tft.test.failureIgnore>${testFailureIgnore}</tft.test.failureIgnore>
<tft.test.excludedGroups />
<tft.test.vmOptions />
<tft.test.jacoco.argLine />
<tft.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.webapp.contextPath>
<tft.jetty.host>0.0.0.0</tft.jetty.host>
<tft.jetty.port>8080</tft.jetty.port>
<tft.jetty.stopPort>9966</tft.jetty.stopPort>
<tft.jetty.scanIntervalSeconds>4</tft.jetty.scanIntervalSeconds>
<tft.jetty.stopKey>${project.groupId}:${project.artifactId}</tft.jetty.stopKey>
<tft.jetty.tmpDir>${project.build.directory}/jetty-work</tft.jetty.tmpDir>
<tft.genisoimage>genisoimage</tft.genisoimage>
<tft.gwt.version>2.1.1</tft.gwt.version>
<tft.scm>git</tft.scm>
<!-- tft.test.listeners></tft.test.listeners -->
<tft.javadoc.excludePackageNames>*.impl:*.impl.*</tft.javadoc.excludePackageNames>
<tft.javadoc.doclet>nl.talsmasoftware.umldoclet.UMLDoclet</tft.javadoc.doclet>
<tft.javadoc.doclet.groupId>nl.talsmasoftware</tft.javadoc.doclet.groupId>
<tft.javadoc.doclet.artifactId>umldoclet</tft.javadoc.doclet.artifactId>
<tft.javadoc.doclet.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-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.mycila-license-maven-plugin.version>4.0.rc2</tft.mycila-license-maven-plugin.version>
<tft.jetty-maven-plugin.version>10.0.1</tft.jetty-maven-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-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.android-maven-plugin.version>4.6.0</tft.android-maven-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.gwt-maven-plugin.version>2.8.2</tft.gwt-maven-plugin.version>
<tft.jacoco-maven-plugin.version>0.8.7</tft.jacoco-maven-plugin.version>
<tft.javafx-maven-plugin.version>0.0.5</tft.javafx-maven-plugin.version>
<tft.jaxb2-maven-plugin.version>2.5.0</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.0.2131</tft.sonar-maven-plugin.version>
<tft.spotbugs-maven-plugin.version>4.5.0.0</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-15</tag>
</scm>
<prerequisites>
<maven>${tft.maven.requiredVersion}</maven>
</prerequisites>
<repositories>
<repository>
<id>snapshots-oss.sonatype.org</id>
<name>Sonatype Snapshots Repository</name>
<url>https://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.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.simpligility.maven.plugins</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>${tft.android-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${tft.docker-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${tft.dockerfile-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.fusesource.mvnplugins</groupId>
<artifactId>maven-graph-plugin</artifactId>
<version>${tft.maven-graph-plugin.version}</version>
</plugin>
<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>${tft.mycila-license-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${tft.vaadin-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${tft.jetty-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.sonatype.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>
<compilerArgs>
<arg>${tft.javac.xlint}</arg>
</compilerArgs>
</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>${tft.spotbugs.effort}</effort>
<threshold>${tft.spotbugs.threshold}</threshold>
<relaxed>${tft.spotbugs.relaxed}</relaxed>
<failOnError>${tft.spotbugs.failOnError}</failOnError>
<maxHeap>${tft.spotbugs.maxHeap}</maxHeap>
<maxAllowedViolations>${tft.spotbugs.maxAllowedViolations}</maxAllowedViolations>
<skip>${tft.spotbugs.skip}</skip>
</configuration>
</plugin>
<!-- CheckStyle (not in a profile, to be used by IDEs) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<dependencies>
<dependency>
<groupId>it.tidalwave.thesefoolishthings</groupId>
<artifactId>superpom-config</artifactId>
<version>${tft.superpom.config.version}</version>
</dependency>
</dependencies>
<!-- Configuration must be replicated to reporting section. -->
<configuration>
<configLocation>it/tidalwave/checkstyle/checkstyle.xml</configLocation>
<skip>${tft.checkstyle.skip}</skip>
</configuration>
</plugin>
<!-- PMD (not in a profile, to be used by IDEs) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<dependencies>
<dependency>
<groupId>${tft.pmd.ruleset.groupId}</groupId>
<artifactId>${tft.pmd.ruleset.artifactId}</artifactId>
<version>${tft.pmd.ruleset.version}</version>
</dependency>
</dependencies>
<!-- Configuration must be replicated to reporting section. -->
<configuration>
<aggregate>${tft.pmd.aggregate}</aggregate>
<sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
<minimumTokens>${tft.pmd.minimumTokens}</minimumTokens>
<minimumPriority>${tft.pmd.minimumPriority}</minimumPriority>
<targetJdk>${tft.javac.source}</targetJdk>
<skip>${tft.pmd.skip}</skip>
<skipEmptyReport>${tft.pmd.skipEmptyReport}</skipEmptyReport>
<showPmdLog>${tft.pmd.showPmdLog}</showPmdLog>
<includeXmlInSite>${tft.pmd.includeXmlInSite}</includeXmlInSite>
<rulesets>
<ruleset>${tft.pmd.ruleset}</ruleset>
</rulesets>
</configuration>
</plugin>
<!-- OWASP -->
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<!-- Configuration must be replicated in reporting section -->
<configuration>
<skip>${tft.owasp.skip}</skip>
<assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled>
<msbuildAnalyzerEnabled>false</msbuildAnalyzerEnabled>
<formats>
<format>xml</format>
<format>html</format>
</formats>
</configuration>
</plugin>
<!-- Configures the release process, calling the assembly to include extra artifacts in deploy -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<localCheckout>${tft.release.localCheckout}</localCheckout>
<pushChanges>${tft.release.pushChanges}</pushChanges>
<preparationGoals>${tft.release.preparationGoals}</preparationGoals>
<completionGoals>${tft.release.completionGoals}</completionGoals>
<goals>${tft.release.goals}</goals>
<arguments>-P${release.profiles} -DaltDeploymentRepository="${altDeploymentRepository}" -DdryRun=${dryRun}</arguments>
<tagNameFormat>${tft.release.tagNameFormat}</tagNameFormat>
</configuration>
</plugin>
<plugin>
<groupId>org.sonatype.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>
</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>
<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.pmd.aggregate>true</tft.pmd.aggregate>
<tft.defaultGoal>site site:stage</tft.defaultGoal>
</properties>
<reporting>
<excludeDefaults>true</excludeDefaults> <!-- FIXME: needed? -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>${tft.maven-project-info-reports-plugin.version}</version>
<reportSets>
<reportSet>
<reports>
<report>ci-management</report>
<report>dependencies</report>
<report>dependency-convergence</report>
<report>dependency-info</report>
<report>dependency-management</report>
<report>distribution-management</report>
<report>index</report>
<report>issue-management</report>
<report>licenses</report>
<report>mailing-lists</report>
<report>modules</report>
<report>plugin-management</report>
<report>plugins</report>
<report>scm</report>
<report>summary</report>
<report>team</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<!-- Surefire -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>${tft.maven-surefire-report-plugin.version}</version>
<configuration>
<skipSurefireReport>${tft.maven-surefire-report-plugin.skip}</skipSurefireReport>
<aggregate>${tft.report.test.aggregate}</aggregate>
<reportsDirectories>
<reportDirectory>${project.build.directory}/surefire-reports/plain</reportDirectory>
<reportDirectory>${project.build.directory}/surefire-reports/jacoco</reportDirectory>
</reportsDirectories>
</configuration>
<reportSets>
<reportSet>
<reports>
<!-- Just collects reports generated in a previous run. -->
<report>report-only</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<!-- Jacoco -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${tft.jacoco-maven-plugin.version}</version>
<reportSets>
<reportSet>
<reports>
<report>report-aggregate</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<!-- SpotBugs -->
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>${tft.spotbugs-maven-plugin.version}</version>
<!-- Configuration must be replicated from build section. -->
<!-- No aggregate reports for SpotBugs: https://spotbugs.github.io/spotbugs-maven-plugin/faq.html#Aggregate_Reporting -->
<configuration>
<xmlOutput>true</xmlOutput>
<spotbugsXmlOutput>true</spotbugsXmlOutput>
<spotbugsXmlOutputDirectory>target/site</spotbugsXmlOutputDirectory> <!-- FIXME: needed? -->
<skipEmptyReport>false</skipEmptyReport>
<effort>${tft.spotbugs.effort}</effort>
<threshold>${tft.spotbugs.threshold}</threshold>
<relaxed>${tft.spotbugs.relaxed}</relaxed>
<failOnError>${tft.spotbugs.failOnError}</failOnError>
<maxHeap>${tft.spotbugs.maxHeap}</maxHeap>
<maxAllowedViolations>${tft.spotbugs.maxAllowedViolations}</maxAllowedViolations>
<skip>${tft.spotbugs.skip}</skip>
</configuration>
<reportSets>
<reportSet>
<reports>
<report>spotbugs</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<!-- PMD -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${tft.maven-pmd-plugin.version}</version>
<!-- Configuration must be replicated from build section. -->
<configuration>
<aggregate>${tft.pmd.aggregate}</aggregate>
<sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
<minimumTokens>${tft.pmd.minimumTokens}</minimumTokens>
<minimumPriority>${tft.pmd.minimumPriority}</minimumPriority>
<targetJdk>${tft.javac.source}</targetJdk>
<skip>${tft.pmd.skip}</skip>
<skipEmptyReport>${tft.pmd.skipEmptyReport}</skipEmptyReport>
<showPmdLog>${tft.pmd.showPmdLog}</showPmdLog>
<includeXmlInSite>${tft.pmd.includeXmlInSite}</includeXmlInSite>
<rulesets>
<ruleset>${tft.pmd.ruleset}</ruleset>
</rulesets>
</configuration>
<reportSets>
<reportSet>
<reports>
<!-- FIXME: can't reuse tft.profile.metrics.pmdGoal -->
<report>pmd</report>
<report>cpd</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<!-- CheckStyle (not in a profile, to be used by IDEs) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${tft.maven-checkstyle-plugin.version}</version>
<!-- Configuration must be replicated from build section. -->
<configuration>
<configLocation>it/tidalwave/checkstyle/checkstyle.xml</configLocation>
<skip>${tft.checkstyle.skip}</skip>
</configuration>
</plugin>
<!-- OWASP -->
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>${tft.dependency-check-maven-plugin.version}</version>
<!-- Configuration must be replicated from build section. -->
<configuration>
<skip>${tft.owasp.skip}</skip>
<assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled>
<msbuildAnalyzerEnabled>false</msbuildAnalyzerEnabled>
</configuration>
<reportSets>
<reportSet>
<reports>
<report>aggregate</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<!-- 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-it.tidalwave-jetty-v2-profile to activate it.
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-jetty-v2</id>
<activation>
<file>
<exists>src/config/activate-it.tidalwave-jetty-v2-profile</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>create-jetty-tmpdir</id>
<configuration>
<target>
<mkdir dir="${tft.jetty.tmpDir}" />
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<httpConnector>
<host>${tft.jetty.host}</host>
<port>${tft.jetty.port}</port>
</httpConnector>
<tmpDirectory>${tft.jetty.tmpDir}</tmpDirectory>
<stopPort>${tft.jetty.stopPort}</stopPort>
<stopKey>${tft.jetty.stopKey}</stopKey>
<scanIntervalSeconds>${tft.jetty.scanIntervalSeconds}</scanIntervalSeconds>
<war>${settings.localRepository}/it/tidalwave/northernwind/${nw.webApp}/${nw.version}/${nw.webApp}-${nw.version}.war</war>
<contextPath>${tft.webapp.contextPath}</contextPath>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile configures AspectJ 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 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-jars</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<excludeTransitive>false</excludeTransitive>
<excludeGroupIds>org.openjfx</excludeGroupIds>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/dist/lib</outputDirectory>
</configuration>
</execution>
<execution>
<id>copy-modules</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<excludeTransitive>false</excludeTransitive>
<includeGroupIds>org.openjfx</includeGroupIds>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/dist/mods</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile is the base configuration for creating a deb package It must be activated by creating the file
'src/config/activate-it.tidalwave-deb-v1-profile'.
The product name must be defined in
* tft.deb.name
and will be installed to ${tft.deb.binaryDirectory}/${tft.deb.name}.
The files to be placed in the installer are extracted from a tarball defined by:
* tft.deb.sourceTarball.groupId (defaults to ${project.id})
* tft.deb.sourceTarball.artifactId
* tft.deb.sourceTarball.version (defaults to ${project.version})
* tft.deb.sourceTarball.classifier (defaults to 'bin')
The binaries directory is speficied by:
* tft.deb.binaryDirectory (defaults to /usr/lib)
Files are packaged with uid/gid defined by
* tft.deb.user (defaults to root)
* tft.deb.group (defaults to root)
This profile must be activated together with it.tidalwave-deb-service-v1 or it.tidalwave-deb-application-v1.
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-deb-base-v1</id>
<activation>
<file>
<exists>src/config/activate-it.tidalwave-deb-v1-profile</exists>
</file>
</activation>
<properties>
<tft.deb.sourceTarball.groupId>${project.groupId}</tft.deb.sourceTarball.groupId>
<tft.deb.sourceTarball.version>${project.version}</tft.deb.sourceTarball.version>
<tft.deb.sourceTarball.classifier>bin</tft.deb.sourceTarball.classifier>
<tft.deb.binaryDirectory>/usr/lib</tft.deb.binaryDirectory>
<tft.deb.user>root</tft.deb.user>
<tft.deb.group>root</tft.deb.group>
</properties>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>generate-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${tft.deb.sourceTarball.groupId}</groupId>
<artifactId>${tft.deb.sourceTarball.artifactId}</artifactId>
<version>${tft.deb.sourceTarball.version}</version>
<classifier>${tft.deb.sourceTarball.classifier}</classifier>
<type>tar.gz</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.vafer</groupId>
<artifactId>jdeb</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jdeb</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- TODO: copyright? -->
<dataSet combine.children="append">
<data>
<type>archive</type>
<src>
${project.build.directory}/${tft.deb.sourceTarball.artifactId}-${tft.deb.sourceTarball.version}-${tft.deb.sourceTarball.classifier}.tar.gz
</src>
<mapper>
<type>perm</type>
<prefix>${tft.deb.binaryDirectory}</prefix>
<user>${tft.deb.user}</user>
<group>${tft.deb.group}</group>
<!-- no permissions, preserved those in the tarball -->
</mapper>
</data>
<data>
<type>link</type>
<linkName>${tft.deb.binaryDirectory}/${tft.deb.name}</linkName>
<linkTarget>${tft.deb.binaryDirectory}/${tft.deb.name}-${project.version}</linkTarget>
<symlink>true</symlink>
<mapper>
<type>perm</type>
<user>${tft.deb.user}</user>
<group>${tft.deb.group}</group>
</mapper>
</data>
</dataSet>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile completes the configuration for creating a deb package for a service. It must be activated by creating the file
'src/config/activate-it.tidalwave-deb-service-v1-profile'.
The deb package will have all the required stuff under /etc/systemd/system to automatically start the service.
Furthermore the following working directories will be created:
* /var/lib/${tft.deb.directory}
* /var/log/${tft.deb.directory}
* /var/cache/${tft.deb.directory}
The value of tft.deb.directory defaults to ${tft.deb.name}.
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-deb-service-v1</id>
<activation>
<file>
<exists>src/config/activate-it.tidalwave-deb-service-v1-profile</exists>
</file>
</activation>
<properties>
<tft.deb.directory>${tft.deb.name}</tft.deb.directory>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.vafer</groupId>
<artifactId>jdeb</artifactId>
<configuration>
<dataSet combine.children="append">
<data>
<type>file</type>
<src>${project.build.directory}/classes/${tft.deb.name}.service</src>
<dst>/etc/systemd/system/${tft.deb.name}.service</dst>
<mapper>
<type>perm</type>
<user>${tft.deb.user}</user>
<group>${tft.deb.group}</group>
</mapper>
</data>
<data>
<type>template</type>
<paths>
<path>/var/lib/${tft.deb.directory}</path>
<path>/var/log/${tft.deb.directory}</path>
<path>/var/cache/${tft.deb.directory}</path>
</paths>
<mapper>
<type>perm</type>
<user>${tft.deb.user}</user>
<group>${tft.deb.group}</group>
</mapper>
</data>
<!-- FIXME: take it from the tarball? -->
<data>
<type>directory</type>
<src>${project.build.directory}/classes/config</src>
<includes>**/*</includes>
<mapper>
<prefix>/var/lib/${tft.deb.directory}/config</prefix>
<type>perm</type>
<user>${tft.deb.user}</user>
<group>${tft.deb.group}</group>
</mapper>
</data>
</dataSet>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile completes the configuration for creating a deb package for an application It must be activated by creating the file
'src/config/activate-it.tidalwave-deb-application-v1-profile'.
The deb package will have an executable alias under /usr/bin.
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-deb-application-v1</id>
<activation>
<file>
<exists>src/config/activate-it.tidalwave-deb-application-v1-profile</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.vafer</groupId>
<artifactId>jdeb</artifactId>
<configuration>
<dataSet combine.children="append">
<data>
<type>link</type>
<linkName>/usr/bin/${tft.deb.name}</linkName>
<linkTarget>${tft.deb.binaryDirectory}/${tft.deb.name}/bin/${tft.deb.name}</linkTarget>
<symlink>true</symlink>
<mapper>
<type>perm</type>
<user>${tft.deb.user}</user>
<group>${tft.deb.group}</group>
<dirmode>755</dirmode>
<filemode>644</filemode>
</mapper>
</data>
</dataSet>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave.deb-sign</id>
<activation>
<property>
<name>gpg.keyname</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.vafer</groupId>
<artifactId>jdeb</artifactId>
<configuration>
<signPackage>true</signPackage>
<signMethod>dpkg-sig</signMethod>
<signRole>origin</signRole>
<key>${gpg.keyname}</key>
<passphrase>${gpg.passphrase}</passphrase>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave.use-local-artifact-target-repo-v1</id>
<properties>
<altDeploymentRepository>local-repo::default::${staging.mvn.repo.url}</altDeploymentRepository>
</properties>
</profile>
<!--====================================================================================================================================================
Deploys to a public repo those artifacts that have been generated during a release process and stored in a local repository. Run as:
mvn -N -Pit.tidalwave.publish-artifacts-v1
Note: on Mac OS X you need to run this with -Djava.io.tmpdir=/tmp (or other directory).
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave.publish-artifacts-v1</id>
<properties>
<wagon.source>${staging.mvn.repo.url}</wagon.source>
<wagon.target>https://oss.sonatype.org/content/repositories/snapshots</wagon.target>
<wagon.targetId>snapshots-oss.sonatype.org</wagon.targetId>
</properties>
<build>
<defaultGoal>initialize org.codehaus.mojo:wagon-maven-plugin:copy</defaultGoal>
</build>
</profile>
<!--====================================================================================================================================================
This profile updates all the dependencies to their latest release. The project must be structured in the standard TheseFoolishThings layout. Run as:
mvn -N -Pit.tidalwave-update-releases-v1
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-update-releases-v1</id>
<build>
<defaultGoal>initialize</defaultGoal>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>update-properties</goal>
</goals>
<configuration>
<allowSnapshots>false</allowSnapshots>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile updates all the dependencies to their latest snapshots. The project must be structured in the standard TheseFoolishThings layout. Run as:
mvn -N -Pit.tidalwave-update-snapshots-v1
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-update-snapshots-v1</id>
<build>
<defaultGoal>initialize</defaultGoal>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>update-properties</goal>
</goals>
<configuration>
<allowSnapshots>true</allowSnapshots>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile updates the headers of files.
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-update-headers</id>
<properties>
<tft.license.template>${basedir}/target/it/tidalwave/license/filtered/tidalwave-header-description.ftl</tft.license.template>
</properties>
<build>
<defaultGoal>initialize</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>it.tidalwave.thesefoolishthings</groupId>
<artifactId>superpom-config</artifactId>
<version>${tft.superpom.config.version}</version>
<overWrite>true</overWrite>
<outputDirectory>${basedir}/target/superpom-config</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/it/tidalwave/license/filtered</outputDirectory>
<resources>
<resource>
<directory>${basedir}/target/superpom-config/it/tidalwave/license</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>update-file-header</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile checks the headers of files.
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-check-headers</id>
<properties>
<tft.license.template>${basedir}/target/it/tidalwave/license/filtered/tidalwave-header-description.ftl</tft.license.template>
</properties>
<build>
<defaultGoal>initialize</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>it.tidalwave.thesefoolishthings</groupId>
<artifactId>superpom-config</artifactId>
<version>${tft.superpom.config.version}</version>
<overWrite>true</overWrite>
<outputDirectory>${basedir}/target/superpom-config</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/it/tidalwave/license/filtered</outputDirectory>
<resources>
<resource>
<directory>${basedir}/target/superpom-config/it/tidalwave/license</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>check-file-header</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile generates the README.md from the pom metadata.
=====================================================================================================================================================-->
<profile>
<id>it.tidalwave-generate-readme-md-v1</id>
<build>
<defaultGoal>dependency:unpack resources:copy-resources</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<artifactItems>
<artifactItem>
<groupId>it.tidalwave.thesefoolishthings</groupId>
<artifactId>superpom-config</artifactId>
<version>${tft.superpom.config.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.basedir}/target/superpom-resources</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<resources>
<resource>
<directory>${project.basedir}/target/superpom-resources/it/tidalwave/readme/</directory>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>.</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile applies the compiler property 'tft.javac.release' for Java 9 and later.
=====================================================================================================================================================-->
<profile>
<id>javac-jdk9plus</id>
<activation>
<jdk>[9,)</jdk>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>${tft.javac.release}</release>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--====================================================================================================================================================
This profile properly configures the javadoc doclet for Java 9 and later.
=====================================================================================================================================================-->
<profile>
<id>umldoclet-jdk9plus</id>
<activation>
<jdk>[9,)</jdk>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<!-- Configuration must be replicated in reporting section -->
<configuration>
<doclet>${tft.javadoc.doclet}</doclet>
<docletArtifact>
<groupId>${tft.javadoc.doclet.groupId}</groupId>
<artifactId>${tft.javadoc.doclet.artifactId}</artifactId>
<version>${tft.javadoc.doclet.version}</version>
</docletArtifact>
<additionalOptions>${tft.javadoc.doclet.additionalParam} ${tft.javadoc.doclint}</additionalOptions>
<useStandardDocletOptions>true</useStandardDocletOptions>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${tft.maven-javadoc-plugin.version}</version>
<!-- Configuration must be replicated in build section -->
<configuration>
<doclet>${tft.javadoc.doclet}</doclet>
<docletArtifact>
<groupId>${tft.javadoc.doclet.groupId}</groupId>
<artifactId>${tft.javadoc.doclet.artifactId}</artifactId>
<version>${tft.javadoc.doclet.version}</version>
</docletArtifact>
<additionalOptions>${tft.javadoc.doclet.additionalParam} ${tft.javadoc.doclint}</additionalOptions>
<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 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>