pom-scijava-base
Used in:
components
- OverviewOverview
- VersionsVersions
- DependentsDependents
- DependenciesDependencies
<dependency>
<groupId>org.scijava</groupId>
<artifactId>pom-scijava-base</artifactId>
<version>22.0.0</version>
</dependency><?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.scijava</groupId>
<artifactId>pom-scijava-base</artifactId>
<version>22.0.0</version>
<packaging>pom</packaging>
<name>SciJava Base POM</name>
<description>This POM is a base which SciJava-based projects can extend to inherit helpful build configuration. It ensures that projects all use a compatible build environment, including versions of Maven plugins and Java itself. It does _not_ provide any dependency version management; see org.scijava:pom-scijava for that.</description>
<url>https://scijava.org/</url>
<inceptionYear>2016</inceptionYear>
<organization>
<name>SciJava</name>
<url>https://scijava.org/</url>
</organization>
<licenses>
<license>
<name>Unlicense</name>
<url>https://unlicense.org/</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>ctrueden</id>
<name>Curtis Rueden</name>
<url>https://imagej.net/people/ctrueden</url>
<roles>
<role>founder</role>
<role>lead</role>
<role>developer</role>
<role>debugger</role>
<role>reviewer</role>
<role>support</role>
<role>maintainer</role>
</roles>
</developer>
</developers>
<contributors>
<contributor>
<name>Mark Hiner</name>
<url>https://imagej.net/people/hinerm</url>
<properties><id>hinerm</id></properties>
</contributor>
<contributor>
<name>Johannes Schindelin</name>
<url>https://imagej.net/people/dscho</url>
<properties><id>dscho</id></properties>
</contributor>
<contributor>
<name>Barry DeZonia</name>
<url>https://imagej.net/people/bdezonia</url>
<properties><id>bdezonia</id></properties>
</contributor>
<contributor>
<name>Stefan Helfrich</name>
<url>https://imagej.net/people/stelfrich</url>
<properties><id>stelfrich</id></properties>
</contributor>
<contributor>
<name>Jean-Yves Tinevez</name>
<url>https://imagej.net/people/tinevez</url>
<properties><id>tinevez</id></properties>
</contributor>
<contributor>
<name>Lorenzo Scianatico</name>
<url>https://imagej.net/people/LoreScianatico</url>
<properties><id>LoreScianatico</id></properties>
</contributor>
<contributor>
<name>Jan Eglinger</name>
<url>https://imagej.net/people/imagejan</url>
<properties><id>imagejan</id></properties>
</contributor>
<contributor>
<name>Ulrik Günther</name>
<url>https://imagej.net/people/skalarproduktraum</url>
<properties><id>skalarproduktraum</id></properties>
</contributor>
<contributor>
<name>Igor Pisarev</name>
</contributor>
<contributor>
<name>Ed Savailonei</name>
</contributor>
</contributors>
<mailingLists>
<mailingList>
<name>SciJava</name>
<subscribe>https://groups.google.com/group/scijava</subscribe>
<unsubscribe>https://groups.google.com/group/scijava</unsubscribe>
<post>scijava@googlegroups.com</post>
<archive>https://groups.google.com/group/scijava</archive>
</mailingList>
</mailingLists>
<scm>
<connection>scm:git:https://github.com/scijava/pom-scijava-base</connection>
<developerConnection>scm:git:git@github.com:scijava/pom-scijava-base</developerConnection>
<tag>pom-scijava-base-22.0.0</tag>
<url>https://github.com/scijava/pom-scijava-base</url>
</scm>
<issueManagement>
<system>GitHub Issues</system>
<url>https://github.com/scijava/pom-scijava-base/issues</url>
</issueManagement>
<ciManagement>
<system>GitHub Actions</system>
<url>https://github.com/scijava/pom-scijava-base/actions</url>
</ciManagement>
<properties>
<!-- Project configuration -->
<!--
The main class of the project. Used in several ways:
* Set as the Main-Class attribute of the JAR manifest.
* dist profile: main class for the JavaFX launchers.
* exec profile: main class to execute.
* jdb profile: main class when launching jdb.
-->
<main-class />
<!-- Package attribute of the JAR artifact. -->
<package-name>${package-guess}</package-name>
<!-- Premain-Class attribute of the JAR artifact. -->
<premain-class />
<!--
Automatic-Module-Name attribute of the JAR artifact, to be used for
Java 9+. Required if the auto-generated name would not be acceptable
(would include reserved words etc.). Set to package name by default.
See: https://stackoverflow.com/a/46501811/478765
-->
<automatic-module-name>${package-name}</automatic-module-name>
<!-- Classifier of the artifact generated by the uberjar profile. -->
<uberjar-classifier>all</uberjar-classifier>
<!--
The License which license-maven-plugin will use to populate.
See: license:update-file-header, license:update-project-license
-->
<license.licenseName>N/A</license.licenseName>
<!--
Files excluded from license header updates.
By default, all script templates are excluded.
-->
<scijava.excludedLicensePatterns>**/script_templates/**</scijava.excludedLicensePatterns>
<!--
NB: The scijava.excludedLicensePatterns property above makes it easier to
append to the list of excluded license patterns in downstream projects.
Override the license.excludes property in your POM with something like this:
<license.excludes>${scijava.excludedLicensePatterns},**/*.json,**/*.xml</license.excludes>
-->
<license.excludes>${scijava.excludedLicensePatterns}</license.excludes>
<!-- Project blurb to use in license headers atop each file. -->
<license.projectName>${project.description}</license.projectName>
<!-- Copyright owners to use in license headers atop each file. -->
<license.copyrightOwners>N/A</license.copyrightOwners>
<!-- Compiler configuration. -->
<scijava.jvm.version>11</scijava.jvm.version>
<scijava.jvm.test.version>${scijava.jvm.version}</scijava.jvm.test.version>
<scijava.jvm.build.version>[${scijava.jvm.version},)</scijava.jvm.build.version>
<maven.compiler.source>${scijava.jvm.version}</maven.compiler.source>
<maven.compiler.target>${scijava.jvm.version}</maven.compiler.target>
<maven.compiler.testSource>${scijava.jvm.test.version}</maven.compiler.testSource>
<maven.compiler.testTarget>${scijava.jvm.test.version}</maven.compiler.testTarget>
<!--
Workaround for a bug in maven-compiler-plugin.
See https://issues.apache.org/jira/browse/MCOMPILER-209
-->
<maven.compiler.useIncrementalCompilation>false</maven.compiler.useIncrementalCompilation>
<!-- Arguments to pass to all JVM launches for better behavior. -->
<scijava.jvm.args />
<!-- Extra arguments affecting JPMS behavior. Only used with Java 9+. -->
<scijava.jvm.jpms-args>--add-opens=java.base/java.lang=ALL-UNNAMED</scijava.jvm.jpms-args>
<!-- Extra arguments specific to maven-surefire-plugin. -->
<scijava.surefire.args />
<!-- Minimum required Maven version to build the project. -->
<scijava.mvn.version>3.6.3</scijava.mvn.version>
<!-- List of groupIds for which build reproducibility is enforced. -->
<scijava.groupIds>org.scijava,net.imagej,net.imglib2,io.scif,sc.fiji</scijava.groupIds>
<!-- Classes the enforcer allows to be duplicated on the classpath. -->
<allowedDuplicateClasses />
<!--
List of valid developer and contributor roles.
See: https://imagej.net/Team
-->
<scijava.team.roles>founder,lead,developer,debugger,reviewer,support,maintainer</scijava.team.roles>
<!--
Links to javadoc APIs, used by the maven-javadoc-plugin.
Change these if you need to link against different API versions.
E.g., for Java 11 projects, use:
<scijava.javadoc.url.java>https://javadoc.scijava.org/Java11/</scijava.javadoc.url.java>
<scijava.javadoc.url.javafx>https://javadoc.scijava.org/JavaFX11/</scijava.javadoc.url.javafx>
-->
<scijava.javadoc.url.java>https://javadoc.scijava.org/Java8/</scijava.javadoc.url.java>
<scijava.javadoc.url.javafx>https://javadoc.scijava.org/JavaFX8/</scijava.javadoc.url.javafx>
<!-- Command to use when invoking java via "mvn -Pexec". -->
<scijava.exec.java>java</scijava.exec.java>
<!--
The coding-style property defines a coding style to be used in your project.
Supported values as of this writing are scijava and imglib2.
-->
<scijava.coding-style>scijava</scijava.coding-style>
<!--
Classifier name for referencing platform-specific artifacts.
By default, this matches the scijava/native-lib-loader naming scheme.
But properties are also defined for other popular naming schemes.
-->
<scijava.platform.arch>${os.arch}</scijava.platform.arch>
<scijava.platform.arch.javacpp>${os.arch}</scijava.platform.arch.javacpp>
<scijava.platform.arch.javafx />
<scijava.platform.arch.jogamp>${os.arch}</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl>-${os.arch}</scijava.platform.arch.lwjgl>
<scijava.natives.classifier>natives-${scijava.platform.family.medium}_${scijava.platform.arch}</scijava.natives.classifier>
<scijava.natives.classifier.javacpp>${scijava.platform.family.longest}-${scijava.platform.arch.javacpp}</scijava.natives.classifier.javacpp>
<scijava.natives.classifier.javafx>${scijava.platform.family.short}${scijava.platform.arch.javafx}</scijava.natives.classifier.javafx>
<scijava.natives.classifier.jogamp>natives-${scijava.platform.family.longest}-${scijava.platform.arch.jogamp}</scijava.natives.classifier.jogamp>
<scijava.natives.classifier.lwjgl>natives-${scijava.platform.family.long}${scijava.platform.arch.lwjgl}</scijava.natives.classifier.lwjgl>
<!-- Additional configuration -->
<!-- NB: Avoid platform encoding warning when copying resources. -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- NB: Specify formatting of the maven.build.timestamp property. -->
<maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ssZ</maven.build.timestamp.format>
<!-- NB: Deploy to Maven Central by default when releasing. -->
<releaseProfiles>sonatype-oss-release</releaseProfiles>
<!-- Let "mvn exec:java" launch the project's main class. -->
<exec.mainClass>${main-class}</exec.mainClass>
<!-- Plugin versions -->
<!-- Core Maven plugins -->
<maven-antrun-plugin.version>3.1.0</maven-antrun-plugin.version>
<maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
<maven-clean-plugin.version>3.4.1</maven-clean-plugin.version>
<!--
NB: Versions of the maven-compiler-plugin newer than 3.8.1 cause very
slow compilation preparation (30-60 seconds or longer) for some
SciJava components, during parsing of module-info.java files.
-->
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
<maven-dependency-plugin.version>3.8.1</maven-dependency-plugin.version>
<maven-deploy-plugin.version>3.1.4</maven-deploy-plugin.version>
<maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
<maven-failsafe-plugin.version>3.5.3</maven-failsafe-plugin.version>
<maven-gpg-plugin.version>3.2.7</maven-gpg-plugin.version>
<maven-help-plugin.version>3.5.1</maven-help-plugin.version>
<maven-install-plugin.version>3.1.4</maven-install-plugin.version>
<maven-invoker-plugin.version>3.9.0</maven-invoker-plugin.version>
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
<maven-javadoc-plugin.version>3.11.2</maven-javadoc-plugin.version>
<maven-plugin-plugin.version>3.11.0</maven-plugin-plugin.version>
<maven-project-info-reports-plugin.version>3.9.0</maven-project-info-reports-plugin.version>
<maven-release-plugin.version>3.1.1</maven-release-plugin.version>
<maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
<maven-shade-plugin.version>3.6.0</maven-shade-plugin.version>
<maven-site-plugin.version>3.12.1</maven-site-plugin.version>
<maven-source-plugin.version>3.3.1</maven-source-plugin.version>
<maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
<!-- Mojohaus Maven plugins -->
<build-helper-maven-plugin.version>3.6.0</build-helper-maven-plugin.version>
<buildnumber-maven-plugin.version>3.2.1</buildnumber-maven-plugin.version>
<cobertura-maven-plugin.version>2.7</cobertura-maven-plugin.version>
<exec-maven-plugin.version>3.5.0</exec-maven-plugin.version>
<groovy-maven-plugin.version>1.5</groovy-maven-plugin.version>
<license-maven-plugin.version>2.5.0</license-maven-plugin.version>
<tidy-maven-plugin.version>1.4.0</tidy-maven-plugin.version>
<versions-maven-plugin.version>2.18.0</versions-maven-plugin.version>
<!-- SciJava Maven plugins -->
<scijava-maven-plugin.version>3.0.1</scijava-maven-plugin.version>
<!-- Other Maven plugins -->
<jshell-maven-plugin.version>1.4</jshell-maven-plugin.version> <!-- com.github.johnpoth -->
<impsort-maven-plugin.version>1.12.0</impsort-maven-plugin.version> <!-- net.revelc.code -->
<formatter-maven-plugin.version>2.26.0</formatter-maven-plugin.version> <!-- net.revelc.code.formatter -->
<maven-graph-plugin.version>1.45</maven-graph-plugin.version> <!-- org.fusesource.mvnplugins -->
<exists-maven-plugin.version>0.12.0</exists-maven-plugin.version> <!-- org.honton.chas -->
<jacoco-maven-plugin.version>0.8.13</jacoco-maven-plugin.version> <!-- org.jacoco -->
<dokka-maven-plugin.version>1.9.10</dokka-maven-plugin.version> <!-- org.jetbrains.jetbrains -->
<revapi-maven-plugin.version>0.15.0</revapi-maven-plugin.version> <!-- org.revapi -->
<sonar-maven-plugin.version>4.0.0.4121</sonar-maven-plugin.version> <!-- org.sonarsource.scanner.maven -->
<central-publishing-maven-plugin.version>0.8.0</central-publishing-maven-plugin.version> <!-- org.sonatype.central -->
<!-- Plugin dependencies -->
<extra-enforcer-rules.version>1.10.0</extra-enforcer-rules.version>
<kotlin.version>1.9.22</kotlin.version>
<revapi-java.version>0.28.4</revapi-java.version>
<scijava-coding-style.version>2.1.1</scijava-coding-style.version>
<velocity.version>1.7</velocity.version>
<!-- Build extensions -->
<wagon-webdav-jackrabbit.version>1.0</wagon-webdav-jackrabbit.version>
</properties>
<build>
<!-- It is nice for "mvn" with no arguments to do something reasonable. -->
<defaultGoal>install</defaultGoal>
<pluginManagement>
<plugins>
<!-- Core Maven plugins -->
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>${maven-antrun-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven-assembly-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>${maven-clean-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-dependency-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven-deploy-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven-enforcer-plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>extra-enforcer-rules</artifactId>
<version>${extra-enforcer-rules.version}</version>
</dependency>
<dependency>
<groupId>org.scijava</groupId>
<artifactId>scijava-maven-plugin</artifactId>
<version>${scijava-maven-plugin.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven-gpg-plugin.version}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<useAgent>true</useAgent>
</configuration>
</plugin>
<plugin>
<artifactId>maven-help-plugin</artifactId>
<version>${maven-help-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>${maven-install-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<!-- Always add classpath to JAR manifests. -->
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<mainClass>${main-class}</mainClass>
<packageName>${package-name}</packageName>
</manifest>
<manifestEntries>
<Premain-Class>${premain-class}</Premain-Class>
<!-- Add SCM revision from buildnumber plugin, if available. -->
<Implementation-Build>${buildNumber}</Implementation-Build>
<!-- Add a formatted timestamp for the build. -->
<Implementation-Date>${maven.build.timestamp}</Implementation-Date>
<!-- Set the Java 9 automatic module name. -->
<Automatic-Module-Name>${automatic-module-name}</Automatic-Module-Name>
</manifestEntries>
</archive>
<skipIfEmpty>true</skipIfEmpty>
</configuration>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<configuration>
<maxmemory>1024m</maxmemory>
<links>
<link>${scijava.javadoc.url.java}</link>
</links>
<tags>
<tag>
<name>implNote</name>
<placement>a</placement>
<head>Implementation Note:</head>
</tag>
</tags>
</configuration>
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>${maven-plugin-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>${maven-project-info-reports-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>${maven-release-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>${maven-shade-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>${maven-site-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
<!-- Build source artifact in addition to main artifact. -->
<executions>
<!--
NB: Attach sources with jar goal, not jar-no-fork, to avoid a bug
where the -sources JAR gets generated and deployed twice. See:
https://issues.apache.org/jira/browse/MNG-5939
-->
<execution>
<id>attach-sources</id>
<phase>none</phase>
</execution>
<execution>
<id>attach-sources-jar</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<!--
Make sure that:
A) unit tests run with sufficient RAM allocated;
B) unit tests do not pop a Java dock icon on OS X;
C) additional args can be given via scijava.surefire.args property;
Sometimes, one needs to pass JVM options to the JVM running the
unit tests, such as -verbose:class or -Djava.awt.headless=true.
Unfortunately, maven-surefire does not expose a command-line
interface to do so, therefore let's simulate it by using our
own property 'scijava.surefire.args' to specify those options.
-->
<configuration>
<argLine>@{argLine} -Xms512m -Xmx512m -Dapple.awt.UIElement=true ${scijava.jvm.args} ${scijava.surefire.args}</argLine>
</configuration>
</plugin>
<!-- Codehaus Maven plugins -->
<!--
Build Helper Maven plugin -
https://www.mojohaus.org/build-helper-maven-plugin/
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${build-helper-maven-plugin.version}</version>
<executions>
<!--
Create a version string which conforms to Java packaging requirements.
https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp89936
In particular, the standard Java packaging tool will fail unless the
version string conforms to Java packaging rules. Further reading:
https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/packaging.html#
-->
<execution>
<id>sanitize-version</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>sanitizedVersion</name>
<value>${project.version}</value>
<regex>^([0-9]+)\.([0-9]+)\.([0-9]+).*$</regex>
<replacement>$1.$2.$3</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
<!--
Make a guess at a reasonable & legal package prefix. This value
is used for package-name and automatic-module-name by default.
-->
<execution>
<id>guess-package</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>package-guess</name>
<value>${project.groupId}.${project.artifactId}</value>
<regex>[^a-z0-9_.]+</regex>
<replacement>_</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
<!--
Build Number Maven plugin -
https://www.mojohaus.org/buildnumber-maven-plugin/
This plugin embeds a build number in the JAR manifest.
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>${buildnumber-maven-plugin.version}</version>
<!-- Record SCM revision in manifest. -->
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<getRevisionOnlyOnce>true</getRevisionOnlyOnce>
<revisionOnScmFailure>UNKNOWN</revisionOnScmFailure>
</configuration>
<dependencies>
<!--
HACK: Override pom-scijava version management of jna
to match what buildnumber-maven-plugin 3.0.0 normally uses.
Otherwise, downstream dependency management somehow impacts
the plugin's dependencies, resulting in build failure:
[ERROR] Failed to execute goal org.codehaus.mojo:
buildnumber-maven-plugin:3.0.0:create (default) on project
mega-melt: Execution default of goal org.codehaus.mojo:
buildnumber-maven-plugin:3.0.0:create failed:
Plugin org.codehaus.mojo:buildnumber-maven-plugin:3.0.0 or
one of its dependencies could not be resolved: Could not
find artifact net.java.dev.jna:platform:jar:5.12.1 in central
(https://repo.maven.apache.org/maven2)
With this hack in place, we instead receive only a warning:
[WARNING] The POM for net.java.dev.jna:platform:jar:5.12.1
is missing, no dependency information available
This warning happens also with buildnumber-maven-plugin 1.4,
as well as the latest master branch (031236bfabc1b170d958).
-->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>platform</artifactId>
<version>3.5.2</version>
</dependency>
</dependencies>
</plugin>
<!--
Cobertura Maven plugin -
https://www.mojohaus.org/cobertura-maven-plugin/
This plugin measures code coverage of tests.
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>${cobertura-maven-plugin.version}</version>
<configuration>
<formats>
<format>html</format>
<format>xml</format>
</formats>
</configuration>
</plugin>
<!--
Exec Maven plugin -
https://www.mojohaus.org/exec-maven-plugin/
This plugin launches a Java class using Maven.
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>${exec-maven-plugin.version}</version>
</plugin>
<!--
License Maven plugin -
https://www.mojohaus.org/license-maven-plugin/
This plugin manages project licenses and source file headers.
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>${license-maven-plugin.version}</version>
<configuration>
<addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
<canUpdateDescription>true</canUpdateDescription>
<canUpdateCopyright>true</canUpdateCopyright>
<extraExtensions>
<bsh>java</bsh>
<config>properties</config>
<ijm>java</ijm>
</extraExtensions>
</configuration>
</plugin>
<!--
Tidy Maven plugin -
https://www.mojohaus.org/tidy-maven-plugin/
Fix the ordering of POM elements using "mvn tidy:pom".
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tidy-maven-plugin</artifactId>
<version>${tidy-maven-plugin.version}</version>
</plugin>
<!--
Versions Maven plugin -
https://www.mojohaus.org/versions-maven-plugin/
Check for new plugin versions using
"mvn versions:display-plugin-updates"
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${versions-maven-plugin.version}</version>
</plugin>
<!-- SciJava Maven plugins -->
<!-- SciJava Maven plugin - https://github.com/scijava/scijava-maven-plugin -->
<plugin>
<groupId>org.scijava</groupId>
<artifactId>scijava-maven-plugin</artifactId>
<version>${scijava-maven-plugin.version}</version>
<executions>
<execution>
<id>set-rootdir</id>
<phase>validate</phase>
<goals>
<goal>set-rootdir</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Other Maven plugins -->
<!-- ImpSort Maven Plugin - https://github.com/revelc/impsort-maven-plugin -->
<plugin>
<groupId>net.revelc.code</groupId>
<artifactId>impsort-maven-plugin</artifactId>
<version>${impsort-maven-plugin.version}</version>
<configuration>
<groups>java.,javax.,com.,net.,org.</groups>
<staticGroups>java,*</staticGroups>
<removeUnused>true</removeUnused>
</configuration>
<executions>
<execution>
<phase>none</phase>
</execution>
</executions>
</plugin>
<!-- Formatter Maven Plugin - https://github.com/revelc/formatter-maven-plugin -->
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
<version>${formatter-maven-plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.scijava</groupId>
<artifactId>scijava-coding-style</artifactId>
<version>${scijava-coding-style.version}</version>
</dependency>
</dependencies>
<configuration>
<configFile>eclipse-formatter-settings/${scijava.coding-style}-coding-style.xml</configFile>
</configuration>
</plugin>
<!--
Maven Graph Plugin -
Generate a dependency graph using "mvn graph:reactor"
-->
<plugin>
<groupId>org.fusesource.mvnplugins</groupId>
<artifactId>maven-graph-plugin</artifactId>
<version>${maven-graph-plugin.version}</version>
<configuration>
<hideScopes>provided,runtime,system,test</hideScopes>
<hideTransitive>true</hideTransitive>
<label>Dependency Graph for ${project.name}</label>
<target>${project.build.directory}/dependency-graph.dot</target>
</configuration>
</plugin>
<!-- Exists Maven Plugin - https://github.com/chonton/exists-maven-plugin -->
<plugin>
<groupId>org.honton.chas</groupId>
<artifactId>exists-maven-plugin</artifactId>
<version>${exists-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>remote</goal>
</goals>
</execution>
</executions>
</plugin>
<!--
JaCoCo Maven plugin -
https://www.jacoco.org/jacoco/trunk/doc/maven.html
This plugin measures code coverage of tests.
-->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin.version}</version>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Revapi Maven Plugin - https://revapi.org/modules/revapi-maven-plugin -->
<plugin>
<groupId>org.revapi</groupId>
<artifactId>revapi-maven-plugin</artifactId>
<version>${revapi-maven-plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.revapi</groupId>
<artifactId>revapi-java</artifactId>
<version>${revapi-java.version}</version>
</dependency>
</dependencies>
</plugin>
<!--
SonarScanner Maven plugin -
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-maven/
SonarQube scanner for java projects.
-->
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>${sonar-maven-plugin.version}</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- Core Maven plugins -->
<!-- Check desired rules during maven lifecycle. -->
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-rules</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<!--
Standard Rules
https://maven.apache.org/enforcer/enforcer-rules/
-->
<requireMavenVersion>
<version>${scijava.mvn.version}</version>
</requireMavenVersion>
<requirePluginVersions>
<message>Plugins need to be versioned!</message>
</requirePluginVersions>
<requireJavaVersion>
<version>${scijava.jvm.build.version}</version>
</requireJavaVersion>
<!--
Extra Enforcer Rules
org.codehaus.mojo:extra-enforcer-rules
https://www.mojohaus.org/extra-enforcer-rules/
-->
<!--
Ensure no two dependencies ship the same class.
Otherwise, much havoc may be wreaked at runtime.
-->
<banDuplicateClasses>
<message>No Duplicate Classes Allowed!
- For duplicate transitive dependencies, add dependency exclusions.
- For duplications between direct dependencies, resolve or add
ignored classes to this rule's configuration.</message>
<findAllDuplicates>true</findAllDuplicates>
<ignoreClasses>${allowedDuplicateClasses}</ignoreClasses>
</banDuplicateClasses>
<!--
Require developers and contributors to use SciJava team roles.
See: https://imagej.net/Team
-->
<requireDeveloperRoles>
<validRoles>${scijava.team.roles}</validRoles>
</requireDeveloperRoles>
<requireContributorRoles>
<validRoles>${scijava.team.roles}</validRoles>
</requireContributorRoles>
<!--
Fail if a dependency requires a too-new version of Java.
-->
<enforceBytecodeVersion>
<maxJdkVersion>${scijava.jvm.version}</maxJdkVersion>
<excludes>
<exclude>com.headius:invokebinder</exclude>
<exclude>com.sun:tools</exclude>
</excludes>
<ignoreClasses>
<ignoreClass>module-info</ignoreClass>
</ignoreClasses>
<ignoredScopes>
<ignoredScope>test</ignoredScope>
</ignoredScopes>
</enforceBytecodeVersion>
<!--
SciJava Maven Plugin
org.scijava:scijava-maven-plugin
https://github.com/scijava/scijava-maven-plugin
-->
<!-- Require inheriting POMs to populate key elements. -->
<requireElements implementation="org.scijava.maven.plugin.enforcer.RequireElements">
<elements>
<element>name</element>
<element>description</element>
<element>url</element>
<element>inceptionYear</element>
<element>organization</element>
<element>licenses</element>
<element>developers</element>
<element>contributors</element>
<element>mailingLists</element>
<element>scm</element>
<element>issueManagement</element>
<element>ciManagement</element>
<element>properties//license.licenseName</element>
<element>properties//license.copyrightOwners</element>
</elements>
</requireElements>
<!--
Require builds to be reproducible.
This means no snapshot dependencies!
-->
<requireReproducibleBuilds implementation="org.scijava.maven.plugin.enforcer.RequireReproducibleBuilds">
<groupIds>${scijava.groupIds}</groupIds>
</requireReproducibleBuilds>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
<!-- Create -sources.jar when building. -->
<plugin>
<artifactId>maven-source-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<!-- Codehaus Maven plugins -->
<!-- Generate a package-friendly version property. -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
<!-- Add Implementation-Build entry to JAR manifest. -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
</plugin>
<!-- SciJava Maven plugins -->
<!--
Enable 'scijava:' goals and copying the artifacts
and dependencies by setting the 'scijava.app.directory'
property to a valid directory.
-->
<plugin>
<groupId>org.scijava</groupId>
<artifactId>scijava-maven-plugin</artifactId>
<configuration>
<deleteOtherVersionsPolicy>older</deleteOtherVersionsPolicy>
</configuration>
<executions>
<execution>
<id>populate-app</id>
<phase>install</phase>
<goals>
<goal>populate-app</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Other Maven plugins -->
<!-- ImpSort Maven Plugin - https://github.com/revelc/impsort-maven-plugin -->
<plugin>
<groupId>net.revelc.code</groupId>
<artifactId>impsort-maven-plugin</artifactId>
</plugin>
<!-- Formatter Maven Plugin - https://github.com/revelc/formatter-maven-plugin -->
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
</plugin>
<!-- Enable 'graph:' goals. -->
<plugin>
<groupId>org.fusesource.mvnplugins</groupId>
<artifactId>maven-graph-plugin</artifactId>
</plugin>
<!-- JaCoCo Maven plugin - https://www.jacoco.org/jacoco/trunk/doc/maven.html -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
</plugins>
<!--
We use wagon-webdav-jackrabbit 1.0 for deploys, since it is
compatible with both Maven 2.2.x and Maven 3.x cross-platform.
-->
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav-jackrabbit</artifactId>
<version>${wagon-webdav-jackrabbit.version}</version>
</extension>
</extensions>
</build>
<reporting>
<plugins>
<!-- Generate javadocs as part of site generation. -->
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
</plugins>
</reporting>
<profiles>
<!--
The groovy-code-generation profile provides a uniform way to generate
sources from templates using Groovy. Apache Velocity, a powerful templating
engine, is automatically available for use from Groovy. For an example of
use, see the ImageJ Ops project: https://github.com/imagej/imagej-ops
-->
<profile>
<id>groovy-code-generation</id>
<activation>
<file>
<!-- NB: No property, because profile activation is too early. -->
<exists>${basedir}/src/main/groovy/generate.groovy</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<!-- Add generated code, including tests, to the build. -->
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/from-template/</source>
</sources>
</configuration>
</execution>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-test-sources/from-template/</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!--
Groovy Maven plugin -
https://www.mojohaus.org/groovy-maven-plugin/
This plugin offers execution of Groovy scripts as part of the build.
SciJava uses it for automatic code generation with Apache Velocity.
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>${groovy-maven-plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>${velocity.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<templateDirectory>${basedir}/src/main/templates</templateDirectory>
<outputDirectory>${project.build.directory}/generated-sources/from-template</outputDirectory>
</properties>
<source>${basedir}/src/main/groovy/generate.groovy</source>
</configuration>
</execution>
<execution>
<id>generate-test-sources</id>
<phase>generate-test-sources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<templateDirectory>${basedir}/src/test/templates</templateDirectory>
<outputDirectory>${project.build.directory}/generated-test-sources/from-template</outputDirectory>
</properties>
<source>${basedir}/src/main/groovy/generate.groovy</source>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
The kotlin profile enables support for Kotlin projects, and mixed
Kotlin-Java projects. It turns on automatically when a src/main/kotlin
folder is present in the project.
-->
<profile>
<id>kotlin</id>
<activation>
<file>
<!-- NB: No property, because profile activation is too early. -->
<exists>${basedir}/src/main/kotlin</exists>
</file>
</activation>
<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
<kotlin.compiler.jvmTarget>${scijava.jvm.version}</kotlin.compiler.jvmTarget>
<kotlin-maven-plugin.version>${kotlin.version}</kotlin-maven-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.basedir}/src/main/kotlin</source>
</sources>
</configuration>
</execution>
<execution>
<id>add-test-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>${project.basedir}/src/test/kotlin</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin-maven-plugin.version}</version>
<executions>
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<!-- Replace default-compile as it is treated specially. -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Replace default-testCompile as it is treated specially. -->
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>java-test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<version>${dokka-maven-plugin.version}</version>
<executions>
<execution>
<phase>pre-site</phase>
<goals>
<goal>dokka</goal>
<goal>javadoc</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<pluginRepositories>
<!-- NB: for dokka-maven-plugin -->
<pluginRepository>
<id>jcenter</id>
<name>JCenter</name>
<url>https://jcenter.bintray.com/</url>
</pluginRepository>
</pluginRepositories>
</profile>
<!--
The exec profile provides an easy way to execute a defined ${main-class}
for manual testing purposes. It is declared in a profile to avoid clashing
with other potential uses of exec-maven-plugin during the main build.
-->
<profile>
<id>exec</id>
<properties>
<exec.args>${scijava.jvm.args}</exec.args>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<executable>${scijava.exec.java}</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>${main-class}</argument>
</arguments>
</configuration>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
The uberjar profile augments the package phase to build an unshaded uber-JAR
or "fat JAR" using the maven-shade-plugin. The default classifier is "all";
override the ${uberjar-classifier} property to change it.
Uber-JARs are convenient for all-in-one distribution of a Java program,
freeing users from the burden of juggling multiple files and dependencies.
However, unshaded uberjars are not appropriate for use as dependencies
themselves, because the uber-JAR's embedded version of each dependency may
clash with other classpath components relying on those same dependencies.
It is advised to publish the standard (non-uber) JAR of your component with
proper dependency declarations as the main artifact, and deploy the uber-JAR
as a separate classifier.
-->
<profile>
<id>uberjar</id>
<build>
<plugins>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedClassifierName>${uberjar-classifier}</shadedClassifierName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<shadedArtifactAttached>true</shadedArtifactAttached>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/json/org.scijava.plugin.Plugin</resource>
</transformer>
</transformers>
<filters>
<filter>
<!--
Shading signed JARs will fail without this.
https://stackoverflow.com/q/999489
-->
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
The jdb profile launches the defined ${main-class} in the jdb debugger.
Launch it using: mvn -Pjdb exec:exec
-->
<profile>
<id>jdb</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<executable>jdb</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>${main-class}</argument>
</arguments>
</configuration>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
The jshell profile launches jshell with the project's runtime classpath.
Launch it using: mvn -Pjshell
-->
<profile>
<id>jshell</id>
<build>
<plugins>
<!-- JShell Maven plugin - https://github.com/johnpoth/jshell-maven-plugin -->
<plugin>
<groupId>com.github.johnpoth</groupId>
<artifactId>jshell-maven-plugin</artifactId>
<version>${jshell-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
The debug-port profile is for debugging. E.g. for Eclipse, pass -DdebugPort=8000,suspend=y
and add a Debug Configuration for a Remote Java Application.
-->
<profile>
<id>debug-port</id>
<activation>
<property><name>debugPort</name></property>
</activation>
<properties>
<scijava.surefire.args>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=localhost:${debugPort}</scijava.surefire.args>
</properties>
</profile>
<!--
The pretty-test profile makes it easier to read the output of unit tests.
Activate it by passing `-Ppretty-test` to the mvn execution.
-->
<profile>
<id>pretty-test</id>
<properties>
<maven-surefire-junit5-tree-reporter.version>1.1.0</maven-surefire-junit5-tree-reporter.version>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<dependencies>
<dependency>
<groupId>me.fabriciorby</groupId>
<artifactId>maven-surefire-junit5-tree-reporter</artifactId>
<version>${maven-surefire-junit5-tree-reporter.version}</version>
</dependency>
</dependencies>
<configuration>
<reportFormat>plain</reportFormat>
<!-- The following block suppresses all console output during unit testing.
<consoleOutputReporter>
<disable>true</disable>
</consoleOutputReporter>
-->
<statelessTestsetInfoReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporterUnicode" />
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--
The run-its profile enables execution of maven-invoker-plugin-based
integration tests. Activate it by passing `-Prun-its` to the mvn execution.
-->
<profile>
<id>run-its</id>
<build>
<defaultGoal>integration-test</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-invoker-plugin</artifactId>
<version>${maven-invoker-plugin.version}</version>
<configuration>
<debug>${invoker.debug}</debug>
<showErrors>true</showErrors>
<streamLogs>true</streamLogs>
<projectsDirectory>src/it</projectsDirectory>
<cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
<pomIncludes>
<pomInclude>*/pom.xml</pomInclude>
</pomIncludes>
<settingsFile>src/it/settings.xml</settingsFile>
<localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
<preBuildHookScript>setup.bsh</preBuildHookScript>
<postBuildHookScript>verify.bsh</postBuildHookScript>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>install</goal>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- The deploy-to-scijava profile enables deployment to the SciJava Maven repository. -->
<profile>
<id>deploy-to-scijava</id>
<build>
<plugins>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<skip>${javadoc.skip}</skip>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>scijava.releases</id>
<name>SciJava Releases Repository</name>
<url>dav:https://maven.scijava.org/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>scijava.snapshots</id>
<name>SciJava Snapshots Repository</name>
<url>dav:https://maven.scijava.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</profile>
<!-- The sonatype-oss-release profile enables releasing to the OSS Sonatype repository. -->
<profile>
<id>sonatype-oss-release</id>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>${central-publishing-maven-plugin.version}</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
<waitUntil>published</waitUntil>
</configuration>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-gpg-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
This only-eclipse profile lets Eclipse parse SciJava annotations of imported projects,
and maps Maven plugin goals to Eclipse executions.
-->
<profile>
<id>only-eclipse</id>
<activation>
<property>
<name>m2e.version</name>
</property>
</activation>
<build>
<pluginManagement>
<plugins>
<!--
Configure the Eclipse m2e plugin to support needed plugins.
-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<!--
NB: Eclipse cannot handle an overridden version property here!
The version needs to stay hardcoded at 1.0.0.
-->
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<versionRange>${maven-enforcer-plugin.version}</versionRange>
<goals>
<goal>enforce</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<versionRange>${build-helper-maven-plugin.version}</versionRange>
<goals>
<goal>regex-property</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>true</runOnIncremental>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<versionRange>${build-helper-maven-plugin.version}</versionRange>
<goals>
<goal>add-source</goal>
<goal>add-test-source</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>false</runOnIncremental>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<versionRange>${buildnumber-maven-plugin.version}</versionRange>
<goals>
<goal>create</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>true</runOnIncremental>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<versionRange>${maven-antrun-plugin.version}</versionRange>
<goals>
<goal>run</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<versionRange>${maven-help-plugin.version}</versionRange>
<goals>
<goal>active-profiles</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<versionRange>${exec-maven-plugin.version}</versionRange>
<goals>
<goal>java</goal>
<goal>exec</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
<!--
NB: Make Eclipse generate code in a full build; see:
https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html
-->
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<versionRange>${groovy-maven-plugin.version}</versionRange>
<goals>
<goal>execute</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
<runOnIncremental>false</runOnIncremental>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>com.googlecode.maven-download-plugin</groupId>
<artifactId>download-maven-plugin</artifactId>
<versionRange>${download-maven-plugin.version}</versionRange>
<goals>
<goal>wget</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<versionRange>${kotlin-maven-plugin.version}</versionRange>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>true</runOnIncremental>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<versionRange>${kotlin-maven-plugin.version}</versionRange>
<goals>
<goal>kapt</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.scijava</groupId>
<artifactId>scijava-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>eclipse-helper</goal>
</goals>
<phase>process-classes</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<!--
HACK - Tell Eclipse to use the TEST source and target JVM version.
This is necessary because the JVM version used for tests may be newer
than that used for the main artifact. Maven is OK with this, but
Eclipse wants only a single JVM version for both main and tests.
See: https://gist.github.com/aslakknutsen/9648594#gistcomment-1588906
-->
<maven.compiler.source>${scijava.jvm.test.version}</maven.compiler.source>
<maven.compiler.target>${scijava.jvm.test.version}</maven.compiler.target>
</properties>
</profile>
<!--
This sign profile signs artifacts using GPG.
-->
<profile>
<id>sign</id>
<build>
<plugins>
<plugin>
<artifactId>maven-gpg-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
<!--
This build-javadoc profile aggregates javadocs for the project
and its direct dependencies.
-->
<profile>
<id>build-javadoc</id>
<build>
<defaultGoal>package</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- Include direct dependencies -->
<includeDependencySources>true</includeDependencySources>
<!-- Remove the "${project.version} API" from the default title -->
<doctitle>${project.name}</doctitle>
<!-- Disable the strict Java 8 doclint. -->
<doclint>none</doclint>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--
The Findbugs profile executes a static code analysis for any bugs,
using Findbugs analysis tool. It produces a findbugs.xml report in target
folder. It may catch some undangerous bugs, so it is better to set the
failOnError variable to false.
-->
<profile>
<id>findbugs</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<findbugs-maven-plugin.version>3.0.5</findbugs-maven-plugin.version>
<findbugs.failOnError>false</findbugs.failOnError>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>${findbugs-maven-plugin.version}</version>
<executions>
<execution>
<id>findbugs</id>
<phase>verify</phase>
<configuration>
<failOnError>${findbugs.failOnError}</failOnError>
<effort>Max</effort>
<threshold>Default</threshold>
<xmlOutput>true</xmlOutput>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>${findbugs.maven.version}</version>
<executions>
<execution>
<id>findbugs</id>
<phase>test</phase>
<configuration>
</configuration>
<goals>
<goal>findbugs</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
The java-9 profile includes adjustments for Java 9+; in particular, it
configures the release value, fixes the path to the javadoc executable,
and overrides JPMS restrictions to re-enable Java reflection.
-->
<profile>
<id>java-9</id>
<activation>
<jdk>[9,)</jdk>
</activation>
<properties>
<maven.compiler.release>${scijava.jvm.version}</maven.compiler.release>
<scijava.jvm.args>${scijava.jvm.jpms-args}</scijava.jvm.args>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--
The java-23 profile includes adjustments for Java 23+; in particular, it
passes the -proc:full argument to javac to enable annotation processing.
See: https://inside.java/2024/06/18/quality-heads-up/
-->
<profile>
<id>java-23</id>
<activation>
<jdk>[23,)</jdk>
</activation>
<properties>
<!-- Enable annotation processing even with Java 23+. -->
<maven.compiler.proc>full</maven.compiler.proc>
</properties>
</profile>
<!--
The following profiles set the scijava.platform system properties to
match the detected architecture. The main intended use case is for
platform-specific natives artifacts, so that they can be depended on using
<classifier>${scijava.natives.classifier}</classifier> in the dependency.
See https://github.com/flimlib/flimj-ops for an example.
-->
<profile>
<id>scijava-platform-x86</id>
<activation>
<os>
<arch>x86</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>32</scijava.platform.arch>
<scijava.platform.arch.javacpp>x86</scijava.platform.arch.javacpp>
<scijava.platform.arch.jogamp>i586</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl>-x86</scijava.platform.arch.lwjgl>
</properties>
</profile>
<profile>
<id>scijava-platform-i386</id>
<activation>
<os>
<arch>i386</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>32</scijava.platform.arch>
<scijava.platform.arch.javacpp>x86</scijava.platform.arch.javacpp>
<scijava.platform.arch.jogamp>i586</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl>-x86</scijava.platform.arch.lwjgl>
</properties>
</profile>
<profile>
<id>scijava-platform-i486</id>
<activation>
<os>
<arch>i486</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>32</scijava.platform.arch>
<scijava.platform.arch.javacpp>x86</scijava.platform.arch.javacpp>
<scijava.platform.arch.jogamp>i586</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl>-x86</scijava.platform.arch.lwjgl>
</properties>
</profile>
<profile>
<id>scijava-platform-i586</id>
<activation>
<os>
<arch>i586</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>32</scijava.platform.arch>
<scijava.platform.arch.javacpp>x86</scijava.platform.arch.javacpp>
<scijava.platform.arch.jogamp>i586</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl>-x86</scijava.platform.arch.lwjgl>
</properties>
</profile>
<profile>
<id>scijava-platform-i686</id>
<activation>
<os>
<arch>i686</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>32</scijava.platform.arch>
<scijava.platform.arch.javacpp>x86</scijava.platform.arch.javacpp>
<scijava.platform.arch.jogamp>i586</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl>-x86</scijava.platform.arch.lwjgl>
</properties>
</profile>
<profile>
<id>scijava-platform-aarch64</id>
<activation>
<os>
<arch>aarch64</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>arm64</scijava.platform.arch>
<scijava.platform.arch.javacpp>arm64</scijava.platform.arch.javacpp>
<scijava.platform.arch.javafx>-aarch64</scijava.platform.arch.javafx>
<scijava.platform.arch.jogamp>aarch64</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl>-arm64</scijava.platform.arch.lwjgl>
</properties>
</profile>
<profile>
<id>scijava-platform-amd64</id>
<activation>
<os>
<arch>amd64</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>64</scijava.platform.arch>
<scijava.platform.arch.javacpp>x86_64</scijava.platform.arch.javacpp>
<scijava.platform.arch.jogamp>amd64</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl />
</properties>
</profile>
<profile>
<id>scijava-platform-arm64</id>
<activation>
<os>
<arch>arm64</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>arm64</scijava.platform.arch>
<scijava.platform.arch.javacpp>arm64</scijava.platform.arch.javacpp>
<scijava.platform.arch.javafx>-aarch64</scijava.platform.arch.javafx>
<scijava.platform.arch.jogamp>aarch64</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl>-arm64</scijava.platform.arch.lwjgl>
</properties>
</profile>
<profile>
<id>scijava-platform-x86_64</id>
<activation>
<os>
<arch>x86_64</arch>
</os>
</activation>
<properties>
<scijava.platform.arch>64</scijava.platform.arch>
<scijava.platform.arch.javacpp>x86_64</scijava.platform.arch.javacpp>
<scijava.platform.arch.jogamp>amd64</scijava.platform.arch.jogamp>
<scijava.platform.arch.lwjgl />
</properties>
</profile>
<profile>
<id>scijava-platform-windows</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<properties>
<scijava.platform.family.short>win</scijava.platform.family.short>
<scijava.platform.family.medium>windows</scijava.platform.family.medium>
<scijava.platform.family.long>windows</scijava.platform.family.long>
<scijava.platform.family.longest>windows</scijava.platform.family.longest>
</properties>
</profile>
<profile>
<id>scijava-platform-macos</id>
<activation>
<os>
<family>mac</family>
</os>
</activation>
<properties>
<scijava.platform.family.short>mac</scijava.platform.family.short>
<scijava.platform.family.medium>osx</scijava.platform.family.medium>
<scijava.platform.family.long>macos</scijava.platform.family.long>
<scijava.platform.family.longest>macosx</scijava.platform.family.longest>
<scijava.platform.arch.jogamp>universal</scijava.platform.arch.jogamp>
</properties>
</profile>
<profile>
<id>scijava-platform-linux</id>
<activation>
<os>
<family>unix</family>
<name>Linux</name>
</os>
</activation>
<properties>
<scijava.platform.family.short>linux</scijava.platform.family.short>
<scijava.platform.family.medium>linux</scijava.platform.family.medium>
<scijava.platform.family.long>linux</scijava.platform.family.long>
<scijava.platform.family.longest>linux</scijava.platform.family.longest>
</properties>
</profile>
</profiles>
</project>