<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.diamondq</groupId>
  <artifactId>master-parent</artifactId>
  <version>6.3.22</version>
  <packaging>pom</packaging>
  <name>DiamondQ: Master Parent</name>
  <description>A common root-level POM for parents. Reusable by any</description>
  <url>https://github.com/diamondq/common-maven/tree/master</url>
  <properties>
    <!-- If you are using the Eclipse External Annotations https://wiki.eclipse.org/JDT_Core/Null_Analysis/External_Annotations 
      then define the location of the folder. NOTE: Mostly commonly this will be defined in the .settings.xml -->
    <eclipse.external.annotations />
    <!-- For use for Java builds -->
    <javac.source.version>1.8</javac.source.version>
    <javac.target.version>1.8</javac.target.version>
    <javac.release.version>8</javac.release.version>
    <java.toolchain.version>8</java.toolchain.version>
    <javac.debug>true</javac.debug>
    <javac.optimize>false</javac.optimize>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
    <snapshot.update.policy>daily</snapshot.update.policy>
    <nexus.auto.release>true</nexus.auto.release>
    <nexus.skip.staging>false</nexus.skip.staging>
    <nexus.skip.local.staging>false</nexus.skip.local.staging>
    <!-- Special version properties -->
    <plugins.surefire.version>3.0.0-M5</plugins.surefire.version>
    <flatten.pom.type>pom</flatten.pom.type>
  </properties>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>
  <developers>
    <developer>
      <name>Mike Mansell</name>
      <email>code@michaelmansell.com</email>
      <organization>DiamondQ</organization>
      <organizationUrl>https://www.diamondq.com</organizationUrl>
    </developer>
  </developers>
  <scm>
    <!--suppress MavenModelInspection -->
    <connection>scm:git:git:github.com:diamondq/${scm.project}.git</connection>
    <!--suppress MavenModelInspection -->
    <developerConnection>scm:git:ssh://github.com:diamondq/${scm.project}.git</developerConnection>
    <!--suppress MavenModelInspection -->
    <url>https://github.com/diamondq/${scm.project}/tree/master</url>
  </scm>
  <repositories>
    <repository>
      <id>dq-snap</id>
      <url>https://nexus.diamondq.com/repository/maven-public-snapshots/</url>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>${snapshot.update.policy}</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
    <repository>
      <id>ossrh-snap</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>${snapshot.update.policy}</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <id>ossrh-snap</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>${snapshot.update.policy}</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </pluginRepository>
  </pluginRepositories>
  <profiles>
    <!-- Make sure that the DiamondQ Maven Profile Activator Extension is present and running. Otherwise, the complex profile 
      rules won't work properly. -->
    <profile>
      <id>fail-if-extension-missing</id>
      <activation>
        <property>
          <name>![DIAMONDQ-PROFILE-ACTIVATOR]</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce-if-diamondq-maven-profile-activator-extension-missing</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <AlwaysFail />
                  </rules>
                  <fail>true</fail>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Define the Eclipse External Annotations only if we're in the Eclipse M2E environment -->
    <profile>
      <id>m2e</id>
      <activation>
        <property>
          <name>m2e.version</name>
        </property>
      </activation>
      <properties>
        <m2e.jdt.annotationpath>${eclipse.external.annotations}</m2e.jdt.annotationpath>
        <environment.eclipse>true</environment.eclipse>
      </properties>
    </profile>
    <!-- If we're not in the Eclipse M2E environment, then set the environment.eclipse to false -->
    <profile>
      <id>not-m2e</id>
      <activation>
        <property>
          <name>!m2e.version</name>
        </property>
      </activation>
      <properties>
        <environment.eclipse>false</environment.eclipse>
      </properties>
    </profile>
    <!-- A leaf project should have its POM flattened. This allows for interpolation within the version as well as just
      increasing the cleanliness of the result. -->
    <profile>
      <id>leaf-project</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>or(file(src/main),file(src/test),type(dockerfile))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.carrotgarden.maven</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <executions>
              <!-- Activate "flatten:flatten" during "prepare-package" -->
              <execution>
                <goals>
                  <goal>flatten</goal>
                </goals>
                <configuration>
                  <!-- Control dependency resolution. -->
                  <performDependencyResolve>true</performDependencyResolve>
                  <includeScope>runtime</includeScope>
                  <excludeTransitive>false</excludeTransitive>
                  <!-- Remove the following pom.xml members. -->
                  <performRemoveMembers>true</performRemoveMembers>
                  <memberRemoveList>
                    <member>parent</member>
                    <member>properties</member>
                    <member>distributionManagement</member>
                    <member>dependencyManagement</member>
                    <member>repositories</member>
                    <member>pluginRepositories</member>
                    <member>build</member>
                    <member>profiles</member>
                    <member>reporting</member>
                  </memberRemoveList>
                  <!-- Change published artifact identity. -->
                  <performOverrideIdentity>true</performOverrideIdentity>
                  <overrideArtifactId>${project.artifactId}</overrideArtifactId>
                  <!-- Switch project from pom.xml to pom.xml.flatten. -->
                  <performSwitchPomXml>true</performSwitchPomXml>
                  <packagingSwitchList>
                    <packaging>${flatten.pom.type}</packaging>
                  </packagingSwitchList>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- A leaf project should have its POM flattened. This allows for interpolation within the version as well as just
      increasing the cleanliness of the result. -->
    <profile>
      <id>pom-project</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>type(pom)</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.carrotgarden.maven</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <executions>
              <!-- Activate "flatten:flatten" during "prepare-package" -->
              <execution>
                <goals>
                  <goal>flatten</goal>
                </goals>
                <configuration>
                  <!-- Control dependency resolution. -->
                  <performDependencyResolve>true</performDependencyResolve>
                  <includeScope>runtime</includeScope>
                  <excludeTransitive>false</excludeTransitive>
                  <!-- Remove the following pom.xml members. -->
                  <performRemoveMembers>true</performRemoveMembers>
                  <memberRemoveList>
                    <member>distributionManagement</member>
                    <member>build</member>
                    <member>properties</member>
                  </memberRemoveList>
                  <!-- Change published artifact identity. -->
                  <performOverrideIdentity>true</performOverrideIdentity>
                  <overrideArtifactId>${project.artifactId}</overrideArtifactId>
                  <!-- Switch project from pom.xml to pom.xml.flatten. -->
                  <performSwitchPomXml>true</performSwitchPomXml>
                  <packagingSwitchList>
                    <packaging>${flatten.pom.type}</packaging>
                  </packagingSwitchList>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- If we're running in Jenkins, then make sure we always update snapshots -->
    <profile>
      <id>update-snapshots-during-build</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>property(jenkins=true)</value>
        </property>
      </activation>
      <properties>
        <snapshot.update.policy>always</snapshot.update.policy>
      </properties>
    </profile>
    <!-- Only SIGN if we're running within Jenkins -->
    <profile>
      <id>sign</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>property(jenkins=true)</value>
        </property>
      </activation>
      <properties>
        <gpg.arg1>--pinentry-mode</gpg.arg1>
        <gpg.arg2>loopback</gpg.arg2>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
                <configuration>
                  <gpgArguments>
                    <arg>${gpg.arg1}</arg>
                    <arg>${gpg.arg2}</arg>
                  </gpgArguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Due to interactions between normal profiles and a master, special overrides if we're deploying ourselves as opposed 
      to be used to deploy a child artifact -->
    <profile>
      <id>deploy-self-to-ossrh</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(property(deploy=self),property(deployossrh=true))</value>
        </property>
      </activation>
      <properties>
        <nexus.serverId>ossrh</nexus.serverId>
        <nexus.url>https://oss.sonatype.org</nexus.url>
        <scm.project>common-maven</scm.project>
      </properties>
      <distributionManagement>
        <repository>
          <id>ossrh</id>
          <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
      </distributionManagement>
    </profile>
    <profile>
      <id>deploy-self-to-dq</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(property(deploy=self),not(property(deployossrh=true)))</value>
        </property>
      </activation>
      <properties>
        <nexus.serverId>dq-release</nexus.serverId>
        <nexus.url>https://nexus.diamondq.com/repository/maven-public-releases</nexus.url>
        <nexus.skip.staging>true</nexus.skip.staging>
        <scm.project>common-maven</scm.project>
      </properties>
      <distributionManagement>
        <repository>
          <id>dq-release</id>
          <url>https://nexus.diamondq.com/repository/maven-public-releases/</url>
        </repository>
      </distributionManagement>
    </profile>
    <!-- For BOM projects, perform a slightly special flatten -->
    <profile>
      <id>bom-profile</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>file(profiles/type-bom)</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>flatten</goal>
                </goals>
                <phase>prepare-package</phase>
                <configuration>
                  <flattenMode>bom</flattenMode>
                  <updatePomFile>true</updatePomFile>
                  <outputDirectory>target/flatten</outputDirectory>
                  <flattenedPomFilename>pom.xml.flatten</flattenedPomFilename>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- For non-OSGi projects, prevent duplicate POM dependencies from being listed -->
    <profile>
      <id>standard-enforcement</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>file(profiles/osgi-pde-target)</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce-non-pde</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <banDuplicatePomDependencyVersions />
                  </rules>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- If an assembly is present, then build that -->
    <profile>
      <id>build-assembly</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>file(profiles/assembly)</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <descriptors>
                <descriptor>src/assembly/assembly.xml</descriptor>
              </descriptors>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>build-Dockerfile</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>type(dockerfile)</value>
        </property>
      </activation>
      <properties>
        <docker.registry>registry.hub.docker.com</docker.registry>
        <dockerbuild.image>${project.artifactId}</dockerbuild.image>
        <dockerbuild.repository>${docker.registry}/${dockerbuild.image}</dockerbuild.repository>
      </properties>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>com.spotify</groupId>
              <artifactId>dockerfile-maven-plugin</artifactId>
              <version>1.4.13</version>
            </plugin>
          </plugins>
        </pluginManagement>
        <plugins>
          <!-- Build Docker image -->
          <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>docker-build-tag</id>
                <goals>
                  <goal>build</goal>
                </goals>
                <configuration>
                  <repository>${dockerbuild.repository}</repository>
                </configuration>
              </execution>
              <execution>
                <id>docker-push-latest</id>
                <goals>
                  <goal>tag</goal>
                  <goal>push</goal>
                </goals>
                <configuration>
                  <repository>${dockerbuild.repository}</repository>
                  <tag>latest</tag>
                </configuration>
              </execution>
              <execution>
                <id>docker-push-tagged</id>
                <goals>
                  <goal>tag</goal>
                  <goal>push</goal>
                </goals>
                <configuration>
                  <repository>${dockerbuild.repository}</repository>
                  <tag>${project.version}-${maven.build.timestamp}</tag>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>javax.activation</groupId>
                <artifactId>activation</artifactId>
                <version>1.1.1</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- ****************************************************************************************************************** 
      Java based -->
    <profile>
      <id>java-project</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>type(java)</value>
        </property>
      </activation>
      <properties>
        <flatten.pom.type>jar</flatten.pom.type>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-toolchains-plugin</artifactId>
            <executions>
              <execution>
                <id>default</id>
                <goals>
                  <goal>toolchain</goal>
                </goals>
                <phase>validate</phase>
                <configuration>
                  <toolchains>
                    <jdk>
                      <version>${java.toolchain.version}</version>
                    </jdk>
                  </toolchains>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>default-compile</id>
                <configuration>
                  <debug>${javac.debug}</debug>
                  <debuglevel>lines,vars,source</debuglevel>
                  <optimize>${javac.optimize}</optimize>
                  <parameters>true</parameters>
                  <showDeprecation>true</showDeprecation>
                  <showWarnings>true</showWarnings>
                  <source>${javac.source.version}</source>
                  <target>${javac.target.version}</target>
                </configuration>
              </execution>
              <execution>
                <id>default-testCompile</id>
                <configuration>
                  <debug>${javac.debug}</debug>
                  <debuglevel>lines,vars,source</debuglevel>
                  <optimize>${javac.optimize}</optimize>
                  <parameters>true</parameters>
                  <showDeprecation>true</showDeprecation>
                  <showWarnings>true</showWarnings>
                  <source>${javac.source.version}</source>
                  <target>${javac.target.version}</target>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <!-- Generate sources jar -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Java based project using Java 8 as a target -->
    <profile>
      <id>java-8</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>jdk(8)</value>
        </property>
      </activation>
      <properties>
        <javac.source.version>1.8</javac.source.version>
        <javac.target.version>1.8</javac.target.version>
        <javac.release.version>8</javac.release.version>
        <java.toolchain.version>8</java.toolchain.version>
      </properties>
    </profile>
    <!-- Java based project using Java 9 as a target -->
    <profile>
      <id>java-9</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>jdk(9)</value>
        </property>
      </activation>
      <properties>
        <javac.source.version>9</javac.source.version>
        <javac.target.version>9</javac.target.version>
        <javac.release.version>9</javac.release.version>
        <java.toolchain.version>9</java.toolchain.version>
      </properties>
    </profile>
    <!-- Java based project using Java 10 as a target -->
    <profile>
      <id>java-10</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>jdk(10)</value>
        </property>
      </activation>
      <properties>
        <javac.source.version>10</javac.source.version>
        <javac.target.version>10</javac.target.version>
        <javac.release.version>10</javac.release.version>
        <java.toolchain.version>10</java.toolchain.version>
      </properties>
    </profile>
    <!-- Java based project using Java 11 as a target -->
    <profile>
      <id>java-11</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>jdk(11)</value>
        </property>
      </activation>
      <properties>
        <javac.source.version>11</javac.source.version>
        <javac.target.version>11</javac.target.version>
        <javac.release.version>11</javac.release.version>
        <java.toolchain.version>11</java.toolchain.version>
      </properties>
    </profile>
    <!-- Java based project using Java 12 as a target -->
    <profile>
      <id>java-12</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>jdk(12)</value>
        </property>
      </activation>
      <properties>
        <javac.source.version>12</javac.source.version>
        <javac.target.version>12</javac.target.version>
        <javac.release.version>12</javac.release.version>
        <java.toolchain.version>12</java.toolchain.version>
      </properties>
    </profile>
    <!-- Java based project using Java 15 as a target -->
    <profile>
      <id>java-15</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>jdk(15)</value>
        </property>
      </activation>
      <properties>
        <javac.source.version>15</javac.source.version>
        <javac.target.version>15</javac.target.version>
        <javac.release.version>15</javac.release.version>
        <java.toolchain.version>15</java.toolchain.version>
      </properties>
    </profile>
    <!-- Java based project using Java 16 as a target -->
    <profile>
      <id>java-16</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>jdk(16)</value>
        </property>
      </activation>
      <properties>
        <javac.source.version>16</javac.source.version>
        <javac.target.version>16</javac.target.version>
        <javac.release.version>16</javac.release.version>
        <java.toolchain.version>16</java.toolchain.version>
      </properties>
    </profile>
    <!-- Java based project using Java 17 as a target -->
    <profile>
      <id>java-17</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>jdk(17)</value>
        </property>
      </activation>
      <properties>
        <javac.source.version>17</javac.source.version>
        <javac.target.version>17</javac.target.version>
        <javac.release.version>17</javac.release.version>
        <java.toolchain.version>17</java.toolchain.version>
      </properties>
    </profile>
    <profile>
      <id>java-automatic-module-name</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>file(profiles/automatic-module-name)</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-all</artifactId>
                <version>3.0.10</version>
                <type>pom</type>
                <scope>runtime</scope>
              </dependency>
              <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.2.11</version>
                <scope>runtime</scope>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <id>add-automatic-module-properties</id>
                <phase>initialize</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <scripts>
                    <script>
<![CDATA[
  String prop = project.properties.get('automatic.module.name');
  if (prop == null) {
    groupId = project.getGroupId();
    artifactId = project.getArtifactId();
    artifactId = artifactId.replace('-', '.').replace('_', '.');
    int lastOffset = groupId.lastIndexOf('.');
    if (lastOffset != -1) {
      String lastPart = groupId.substring(lastOffset + 1);
      int firstPartOffset = artifactId.indexOf('.');
      String firstPart;
      if (firstPartOffset != -1)
        firstPart = artifactId.substring(0, firstPartOffset);
      else
        firstPart = artifactId;
      if (lastPart.equals(firstPart))
        groupId = groupId.substring(0, lastOffset);
    }
    String name = groupId + "." + artifactId;
    project.properties.setProperty('automatic.module.name', name);
  } 
]]>
                    </script>
                  </scripts>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>default-jar</id>
                <configuration>
                  <archive>
                    <manifestEntries>
                      <Automatic-Module-Name>${automatic.module.name}</Automatic-Module-Name>
                    </manifestEntries>
                  </archive>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Set up the compilation of the test code -->
    <profile>
      <id>java-junit-test</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/junit5))</value>
        </property>
      </activation>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.junit</groupId>
            <artifactId>junit-bom</artifactId>
            <version>5.8.2</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-api</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-engine</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-params</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>
    <profile>
      <id>java-build-tests</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(src/test))</value>
        </property>
      </activation>
      <properties>
        <javac.skip.test.categories></javac.skip.test.categories>
        <argLine></argLine>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>default-testCompile</id>
                <configuration>
                  <debug>${javac.debug}</debug>
                  <debuglevel>lines,vars,source</debuglevel>
                  <optimize>${javac.optimize}</optimize>
                  <parameters>true</parameters>
                  <showDeprecation>true</showDeprecation>
                  <showWarnings>true</showWarnings>
                  <source>${javac.source.version}</source>
                  <target>${javac.target.version}</target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>java-run-tests-base</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),or(file(src/test),and(file(src/main),file(profiles/tests-only))))</value>
        </property>
      </activation>
      <properties>
        <javac.skip.test.categories></javac.skip.test.categories>
        <argLine></argLine>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-all</artifactId>
                <version>3.0.10</version>
                <type>pom</type>
                <scope>runtime</scope>
              </dependency>
              <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.2.11</version>
                <scope>runtime</scope>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <id>add-dynamic-properties</id>
                <phase>initialize</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <scripts>
                    <script>
<![CDATA[
  argline = ""
  for(String key : project.properties.keys()) {
    if (key.startsWith("dq.surefire.argline.")) {
      argline += project.properties[key] + " "
    }
  }
  project.properties.setProperty('dq.surefire.argline', argline) 
]]>
                    </script>
                  </scripts>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>java-run-tests-normal</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(src/test))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>default-test</id>
                <configuration>
                  <systemPropertyVariables>
                    <env.eclipse>${environment.eclipse}</env.eclipse>
                    <env.maven>true</env.maven>
                  </systemPropertyVariables>
                  <excludedGroups>${javac.skip.test.categories}</excludedGroups>
                  <argLine>@{argLine} ${dq.surefire.argline}</argLine>
                  <statelessTestsetReporter
                    implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
                    <disable>false</disable>
                    <usePhrasedFileName>false</usePhrasedFileName>
                    <usePhrasedTestSuiteClassName>true</usePhrasedTestSuiteClassName>
                    <usePhrasedTestCaseClassName>true</usePhrasedTestCaseClassName>
                    <usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
                  </statelessTestsetReporter>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>java-run-tests-only</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(src/main),file(profiles/tests-only))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>default-test</id>
                <configuration>
                  <systemPropertyVariables>
                    <env.eclipse>${environment.eclipse}</env.eclipse>
                    <env.maven>true</env.maven>
                  </systemPropertyVariables>
                  <testSourceDirectory>${project.build.sourceDirectory}</testSourceDirectory>
                  <testClassesDirectory>${project.build.outputDirectory}</testClassesDirectory>
                  <excludedGroups>${javac.skip.test.categories}</excludedGroups>
                  <argLine>@{argLine} ${dq.surefire.argline}</argLine>
                  <statelessTestsetReporter
                    implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
                    <disable>false</disable>
                    <usePhrasedFileName>false</usePhrasedFileName>
                    <usePhrasedTestSuiteClassName>true</usePhrasedTestSuiteClassName>
                    <usePhrasedTestCaseClassName>true</usePhrasedTestCaseClassName>
                    <usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
                  </statelessTestsetReporter>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- If there is no main code, then make sure that all the default JAR plugins are disabled -->
    <profile>
      <id>java-build-skip</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),missing(src/main))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>default-compile</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>default-resources</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>default-jar</id>
                <phase />
                <configuration>
                  <skipIfEmpty>true</skipIfEmpty>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <executions>
              <execution>
                <id>default-install</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <executions>
              <execution>
                <id>default-deploy</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>injected-nexus-deploy</id>
                <phase />
                <configuration>
                  <skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Setup the Surefire for testing under Java 9 or greater -->
    <profile>
      <id>java-test-jdk9</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),jdk(>=9))</value>
        </property>
      </activation>
      <properties>
        <dq.surefire.argline.jdk9>--illegal-access=permit</dq.surefire.argline.jdk9>
      </properties>
    </profile>
    <!-- If there is no test, then make sure that all the default JAR plugins are disabled -->
    <profile>
      <id>java-build-test-skip</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),missing(src/test))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>default-testCompile</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>default-testResources</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>java-run-test-skip</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),missing(src/test),missing(profiles/tests-only))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>default-test</id>
                <phase />
                <configuration>
                  <skip>true</skip>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-with-tools</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/test-with-tools))</value>
        </property>
      </activation>
      <properties>
        <dq.surefire.argline.tools>"-Xbootclasspath/p:@{javaHome}/lib/tools.jar"</dq.surefire.argline.tools>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.diamondq.maven</groupId>
            <artifactId>javahome-resolver-maven-plugin</artifactId>
            <executions>
              <execution>
                <phase>validate</phase>
                <goals>
                  <goal>resolve</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Request that the test code be packaged up into a Jar and deployed -->
    <profile>
      <id>ship-tests</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/ship-tests))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>ship-tests</id>
                <goals>
                  <goal>test-jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Generate I18N strings -->
    <profile>
      <id>generate-i18n-strings</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),or(file(profiles/internal-i18n-enums),file(profiles/i18n-enums)))</value>
        </property>
      </activation>
      <properties>
        <osgi.dont.export.i18n>!${osgi.base.package}.*.i18n,</osgi.dont.export.i18n>
        <!-- When generating the i18n enum classes from a messages.properties, this setting allows the enum class to extend 
          a class -->
        <i18n.implementation.class />
        <!-- When generating the i18n enum classes from a messages.properties, this setting allows the ResourceBundle's ClassLoader 
          and Control to be provided by another class -->
        <i18n.resourcebundleloader.class />
        <!-- Defines the directory to store the generated enum class into -->
        <i18n.output.dir>${project.build.directory}/generated-sources/i18n</i18n.output.dir>
        <!-- Defines the separator between package names in the enum key -->
        <i18n.package.separator>_</i18n.package.separator>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.diamondq.maven</groupId>
            <artifactId>i18n-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>generate-i18n-enums</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>generateEnums</goal>
                </goals>
                <configuration>
                  <propsDir>${project.basedir}/src/i18n/resources</propsDir>
                  <outputDir>${i18n.output.dir}</outputDir>
                  <implementsClass>${i18n.implementation.class}</implementsClass>
                  <resourceBundleLoaderClass>${i18n.resourcebundleloader.class}</resourceBundleLoaderClass>
                  <packageSeparator>${i18n.package.separator}</packageSeparator>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>add-i18n-enums</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>add-source</goal>
                </goals>
                <configuration>
                  <sources>
                    <source>${i18n.output.dir}</source>
                  </sources>
                </configuration>
              </execution>
              <execution>
                <id>add-i18n-properties</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>add-resource</goal>
                </goals>
                <configuration>
                  <resources>
                    <resource>
                      <directory>src/i18n/resources</directory>
                      <targetPath></targetPath>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- For normal cases, add a dependency to the common-utils project so that the default implementation of I18N class 
      can be resolved -->
    <profile>
      <id>generate-i18n-strings-dependencies</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/i18n-enums))</value>
        </property>
      </activation>
      <dependencies>
        <dependency>
          <groupId>com.diamondq.common</groupId>
          <artifactId>common-utils</artifactId>
        </dependency>
      </dependencies>
    </profile>
    <!-- Generate the ANTRL4 classes based on the definition -->
    <profile>
      <id>generate-antlr</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(src/main/antlr4))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>generate-code</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>antlr4</goal>
                </goals>
                <configuration>
                  <visitor>true</visitor>
                  <listener>true</listener>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- If there is a META-INF folder then make sure it's added to the build -->
    <profile>
      <id>meta-inf-present</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(META-INF))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>add-meta-inf</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>add-resource</goal>
                </goals>
                <configuration>
                  <resources>
                    <resource>
                      <directory>META-INF</directory>
                      <targetPath>META-INF</targetPath>
                      <excludes>
                        <exclude>MANIFEST.MF</exclude>
                        <exclude>placeholder.txt</exclude>
                      </excludes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- WIP support for AspectJ compilation -->
    <profile>
      <id>aspectj-aspect-project</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/aspects))</value>
        </property>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjrt</artifactId>
        </dependency>
      </dependencies>
      <dependencyManagement>
        <dependencies>
          <!-- AspectJ -->
          <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.9.8</version>
          </dependency>
          <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjtools</artifactId>
            <version>1.9.8</version>
          </dependency>
        </dependencies>
      </dependencyManagement>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.11.1-SNAPSHOT</version>
            <configuration>
              <complianceLevel>1.8</complianceLevel>
              <includes>
                <include>**/*.java</include>
                <include>**/*.aj</include>
              </includes>
            </configuration>
            <executions>
              <execution>
                <id>compile_with_aspectj</id>
                <goals>
                  <goal>compile</goal>
                </goals>
              </execution>
              <execution>
                <id>test-compile_with_aspectj</id>
                <goals>
                  <goal>test-compile</goal>
                </goals>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>1.9.8</version>
              </dependency>
              <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjtools</artifactId>
                <version>1.9.8</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Immutables -->
    <profile>
      <id>immutables</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/immutables))</value>
        </property>
      </activation>
      <properties>
        <immutables.version>2.8.9-ea-1</immutables.version>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.immutables</groupId>
          <artifactId>value</artifactId>
          <version>${immutables.version}</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<configuration>
			  <annotationProcessorPaths combine.children="append">
				<path>
				  <groupId>org.immutables</groupId>
				  <artifactId>value</artifactId>
				  <version>${immutables.version}</version>
				</path>
			  </annotationProcessorPaths>
			  <annotationProcessors combine.children="append">
				<annotationProcessor>org.immutables.processor.ProxyProcessor</annotationProcessor>
			  </annotationProcessors>
			</configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Micronaut dependencies -->
    <profile>
      <id>micronaut-dependencies</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>or(file(profiles/micronaut-dependency-optional),file(profiles/micronaut-dependency))</value>
        </property>
      </activation>
      <properties>
        <micronaut.version>2.5.13</micronaut.version>
      </properties>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
          </dependency>
          <dependency>
            <groupId>com.fasterxml.jackson</groupId>
            <artifactId>jackson-bom</artifactId>
            <version>2.13.2</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-datatype-jsr353</artifactId>
            <version>2.13.2</version>
          </dependency>
          <dependency>
            <groupId>com.oracle.oci.sdk</groupId>
            <artifactId>oci-java-sdk-bom</artifactId>
            <version>1.37.2</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
          </dependency>
          <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-bom</artifactId>
            <version>1.42.1</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-bom</artifactId>
            <version>1.6.7</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-bom</artifactId>
            <version>1.8.3</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>io.micronaut.aws</groupId>
            <artifactId>micronaut-aws-bom</artifactId>
            <version>2.8.0</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>io.micronaut.liquibase</groupId>
            <artifactId>micronaut-liquibase</artifactId>
            <version>3.4.1</version>
          </dependency>
          <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-tcnative-classes</artifactId>
            <version>2.0.50.Final</version>
          </dependency>
          <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-bom</artifactId>
            <version>4.1.74.Final</version>
            <!-- IMPORTANT NOTE: Keep the above dependency override for netty-tcnative-classes up-to-date. It's currently 
              present because the current netty-bom includes an invalid version -->
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-bom</artifactId>
            <version>3.0.10</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-bom</artifactId>
            <version>1.5.31</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-bom</artifactId>
            <version>2.0-groovy-3.0</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>5.3.10</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <!-- Actual dependency. Everything above is tweaks to bring the micronaut-bom deps up to later versions -->
          <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-bom</artifactId>
            <version>${micronaut.version}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
    </profile>
    <profile>
      <id>micronaut-annotation-compiler</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),or(file(profiles/micronaut-dependency-optional),file(profiles/micronaut-dependency)))</value>
        </property>
      </activation>
      <dependencies>
        <dependency>
          <groupId>io.micronaut</groupId>
          <artifactId>micronaut-inject</artifactId>
          <optional>true</optional>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<configuration>
			  <annotationProcessorPaths combine.children="append">
				<path>
				  <groupId>io.micronaut</groupId>
				  <artifactId>micronaut-inject-java</artifactId>
				  <version>${micronaut.version}</version>
				</path>
				<path>
				  <groupId>io.micronaut</groupId>
				  <artifactId>micronaut-validation</artifactId>
				  <version>${micronaut.version}</version>
				</path>
			  </annotationProcessorPaths>
			</configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Micronaut OpenAPI -->
    <profile>
      <id>micronaut-openapi</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/micronaut-openapi))</value>
        </property>
      </activation>
      <properties>
        <micronaut.version>2.5.13</micronaut.version>
        <micronaut.openapi.version>1.5.3</micronaut.openapi.version>
      </properties>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-bom</artifactId>
            <version>${micronaut.version}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>io.swagger.core.v3</groupId>
          <artifactId>swagger-annotations</artifactId>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<configuration>
			  <annotationProcessorPaths combine.children="append">
				<path>
				  <groupId>io.micronaut.configuration</groupId>
				  <artifactId>micronaut-openapi</artifactId>
				  <version>${micronaut.openapi.version}</version>
				</path>
			  </annotationProcessorPaths>
			</configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Micronaut Security -->
    <profile>
      <id>micronaut-security</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/micronaut-security))</value>
        </property>
      </activation>
      <properties>
        <micronaut.version>2.5.13</micronaut.version>
        <micronaut.security.version>2.5.0</micronaut.security.version>
      </properties>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-bom</artifactId>
            <version>${micronaut.version}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>io.micronaut.security</groupId>
          <artifactId>micronaut-security</artifactId>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<configuration>
			  <annotationProcessorPaths combine.children="append">
				<path>
				  <groupId>io.micronaut.security</groupId>
				  <artifactId>micronaut-security-annotations</artifactId>
				  <version>${micronaut.security.version}</version>
				</path>
			  </annotationProcessorPaths>
			</configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Micronaut Data -->
    <profile>
      <id>micronaut-data-dependencies</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>file(profiles/micronaut-data)</value>
        </property>
      </activation>
      <properties>
        <micronaut.version>2.5.13</micronaut.version>
        <micronaut.data.version>2.5.0</micronaut.data.version>
      </properties>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>io.micronaut.data</groupId>
            <artifactId>micronaut-data-bom</artifactId>
            <version>${micronaut.data.version}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
    </profile>
    <profile>
      <id>micronaut-data-compiler-annotations</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/micronaut-data))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<configuration>
			  <annotationProcessorPaths combine.children="append">
				<path>
				  <groupId>io.micronaut.data</groupId>
				  <artifactId>micronaut-data-processor</artifactId>
				  <version>${micronaut.data.version}</version>
				</path>
			  </annotationProcessorPaths>
			</configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Vert.x support -->
    <profile>
      <id>vertx-annotations</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/vertx-annotations))</value>
        </property>
      </activation>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>com.fasterxml.jackson</groupId>
            <artifactId>jackson-bom</artifactId>
            <version>2.13.2</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-tcnative-classes</artifactId>
            <version>2.0.50.Final</version>
          </dependency>
          <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-bom</artifactId>
            <version>4.1.74.Final</version>
            <!-- IMPORTANT NOTE: Keep the above dependency override for netty-tcnative-classes up-to-date. It's currently 
              present because the current netty-bom includes an invalid version -->
            <type>pom</type>
            <scope>import</scope>
          </dependency>
          <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-stack-depchain</artifactId>
            <version>4.1.4</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-codegen</artifactId>
          <classifier>processor</classifier>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-service-proxy</artifactId>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<configuration>
			  <annotationProcessorPaths combine.children="append">
				<path>
				  <groupId>io.vertx</groupId>
				  <artifactId>vertx-codegen</artifactId>
				  <classifier>processor</classifier>
				  <version>4.1.4</version>
				</path>
				<path>
				  <groupId>io.vertx</groupId>
				  <artifactId>vertx-service-proxy</artifactId>
				  <version>4.1.4</version>
				</path>
			  </annotationProcessorPaths>
			  <annotationProcessors combine.children="append">
				<annotationProcessor>io.vertx.codegen.CodeGenProcessor</annotationProcessor>
			  </annotationProcessors>
			</configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- ****************************************************************************************************************** 
      Java OSGi based -->
    <!-- If there is an OSGI-INF directory, then add it as a resource and make sure that the Manifest includes the XML files -->
    <profile>
      <id>osgi-inf-present</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(osgi),file(OSGI-INF))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>add-osgi-inf</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>add-resource</goal>
                </goals>
                <configuration>
                  <resources>
                    <resource>
                      <directory>OSGI-INF</directory>
                      <targetPath>OSGI-INF</targetPath>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <executions>
              <execution>
                <id>bundle-manifest</id>
                <configuration>
                  <instructions>
                    <Service-Component>OSGI-INF/*.xml</Service-Component>
                  </instructions>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- If there is an osgi-pde-target profile, include the necessary plugins -->
    <profile>
      <id>osgi-pde-target</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(osgi),file(profiles/osgi-pde-target))</value>
        </property>
      </activation>
      <properties>
        <!-- This defines the name of the target file. If 'something' is provided here, then the file name will be something.target. -->
        <osgi.pde.target.name>${project.artifactId}</osgi.pde.target.name>
        <!-- Allow extra dependencies to be defined. Format is groupId:artifactId:version:type:classifer,... -->
        <osgi.pde.target.extra.deps></osgi.pde.target.extra.deps>
      </properties>
      <build>
        <plugins>
          <!-- Since the target contains absolute paths, we don't want to deploy it to a permanent/remote repository -->
          <!-- However, since it's only used for the build process, as long as it gets deployed to the local repository, 
            we're fine. -->
          <plugin>
            <artifactId>maven-deploy-plugin</artifactId>
            <executions>
              <execution>
                <id>default-deploy</id>
                <phase />
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>injected-nexus-deploy</id>
                <phase />
                <configuration>
                  <skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-install-plugin</artifactId>
            <executions>
              <execution>
                <id>default-install</id>
                <phase />
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.diamondq.maven</groupId>
            <artifactId>osgi-target-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>build-target</id>
                <phase>process-resources</phase>
                <goals>
                  <goal>build-target</goal>
                </goals>
                <configuration>
                  <outputFile>${project.basedir}/${osgi.pde.target.name}.target</outputFile>
                  <excludeArtifactIds>osgi.core,osgi.cmpn</excludeArtifactIds>
                  <targetName><![CDATA[${osgi.pde.target.name} target]]></targetName>
                  <extraDeps>${osgi.pde.target.extra.deps}</extraDeps>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.2.0</version>
                <type>maven-plugin</type>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- If there is an OSGi project, then add the maven-bundle-plugin -->
    <profile>
      <id>osgi-project</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),type(osgi))</value>
        </property>
      </activation>
      <properties>
        <!-- The basic list of headers to remove from the generated MANIFEST.MF -->
        <osgi.base.removeheaders>Tool, Originally-Created-By, Bnd-LastModified, Private-Package, Include-Resource,
          Embed-Transitive, Embed-Dependency</osgi.base.removeheaders>
        <!-- The basic list of headers to remove from the source JAR generated MANIFEST.MF -->
        <osgi.base.removesrcheaders>Tool, Originally-Created-By, Bnd-LastModified, Private-Package, Include-Resource,
          Import-Package, Export-Package, Require-Capability, Provide-Capability</osgi.base.removesrcheaders>
        <!-- To make it easier to extend the list, override this property with your own settings, potentially including the 
          osgi.base.removeheaders -->
        <osgi.removeheaders>${osgi.base.removeheaders}</osgi.removeheaders>
        <!-- To make it easier to extend the list, override this property with your own settings, potentially including the 
          osgi.base.removesrcheaders -->
        <osgi.removesrcheaders>${osgi.base.removesrcheaders}</osgi.removesrcheaders>
        <!-- The base package to always export. NOTE: This must be defined in a child project -->
        <osgi.base.package />
        <!-- A placeholder to inject a DON'T export for i18n. Automatically added by the i18n profile. This is expected to 
          end in a comma to allow chaining. -->
        <osgi.dont.export.i18n />
        <!-- The standard to not Export any package ending in impl. This is expected to end in a comma to allow chaining. -->
        <osgi.dont.export.impl>!${osgi.base.package}.*.impl,!${osgi.base.package}.*.impl.*,</osgi.dont.export.impl>
        <!-- Override this property to inject extra packages to not export. This is expected to end in a comma to
          allow chaining. -->
        <osgi.extra.dont.export.packages />
        <!-- The list of packages that won't be exported. NOTE: This list requires the exclamation point (!) to be already added. -->
        <osgi.dont.export.packages>${osgi.dont.export.i18n}${osgi.dont.export.impl}${osgi.extra.dont.export.packages}</osgi.dont.export.packages>
        <!-- Override this property to inject extra Export-Package commands. This is expected to end in a comma to allow 
          chaining. -->
        <osgi.extra.export.packages />
        <!-- The base package that is always exported -->
        <osgi.export.base.package>${osgi.base.package}.*</osgi.export.base.package>
        <!-- This is the Export-Package. Generally override one of the component properties -->
        <osgi.export.packages>${osgi.dont.export.packages}${osgi.extra.export.packages}${osgi.export.base.package}</osgi.export.packages>
        <!-- Override this property to inject extra Import-Package elements. NOTE: The osgi.import.packages property expects 
          this property to end with a comma to support chaining -->
        <osgi.extra.import.packages />
        <!-- This represents the packages to import. The default is * -->
        <osgi.import.packages>${osgi.extra.import.packages}*</osgi.import.packages>
        <!-- This represents the Fragment-Host -->
        <osgi.fragment.host />
        <!-- This represents the DynamicImport-Package -->
        <osgi.dynamicimport.package />
        <!-- The OSGi version -->
        <osgi.core.version>8.0.0</osgi.core.version>
        <osgi.cmpn.version>7.0.0</osgi.cmpn.version>
      </properties>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.core</artifactId>
            <version>${osgi.core.version}</version>
          </dependency>
          <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.cmpn</artifactId>
            <version>${osgi.cmpn.version}</version>
          </dependency>
        </dependencies>
      </dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>org.osgi</groupId>
          <artifactId>osgi.core</artifactId>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.osgi</groupId>
          <artifactId>osgi.cmpn</artifactId>
          <scope>provided</scope>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce-osgi-properties</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireProperty>
                      <property>osgi.base.package</property>
                      <regex>.+</regex>
                      <regexMessage><![CDATA[You must set the osgi.base.package property]]></regexMessage>
                    </requireProperty>
                  </rules>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <executions>
              <execution>
                <id>bundle-manifest</id>
                <phase>process-classes</phase>
                <goals>
                  <goal>manifest</goal>
                </goals>
                <configuration>
                  <instructions>
                    <_removeheaders>${osgi.removeheaders}</_removeheaders>
                    <Import-Package>${osgi.import.packages}</Import-Package>
                    <Export-Package>${osgi.export.packages}</Export-Package>
                    <Fragment-Host>${osgi.fragment.host}</Fragment-Host>
                    <DynamicImport-Package>${osgi.dynamicimport.package}</DynamicImport-Package>
                  </instructions>
                  <manifestLocation>${project.basedir}/META-INF</manifestLocation>
                  <niceManifest>true</niceManifest>
                </configuration>
              </execution>
              <!-- mmansell - Disabled because the latest version is conflicting in Eclipse. I'm not sure why yet <execution> 
                <id>source-manifest</id> <phase>process-classes</phase> <goals> <goal>manifest</goal> </goals> <configuration> <instructions> 
                <_removeheaders>${osgi.removesrcheaders}</_removeheaders> <Export-Package /> <Bundle-SymbolicName>$[maven-symbolicname].source</Bundle-SymbolicName> 
                <Eclipse-SourceBundle>$[maven-symbolicname];version="$[Bundle-Version]";roots:="."</Eclipse-SourceBundle> </instructions> 
                <manifestLocation>${project.build.directory}/sources</manifestLocation> <niceManifest>true</niceManifest> </configuration> 
                </execution> -->
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>default-jar</id>
                <configuration>
                  <archive>
                    <manifestFile>${project.basedir}/META-INF/MANIFEST.MF</manifestFile>
                  </archive>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <!-- Generate sources jar -->
          <!-- mmansell - Disabled because source manifest was disabled above <plugin> <groupId>org.apache.maven.plugins</groupId> 
            <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <configuration> <archive> <manifestFile>${project.build.directory}/sources/MANIFEST.MF</manifestFile> 
            </archive> </configuration> </execution> </executions> </plugin> -->
        </plugins>
      </build>
    </profile>
    <!-- Add support for a karaf-feature project. This is a simple POM with a single feature.xml file. -->
    <profile>
      <id>karaf-feature-profile</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(osgi),file(profiles/karaf-feature))</value>
        </property>
      </activation>
      <properties>
        <!-- The file that is the feature file. By default, it's named the same as the artifactId and exists at the root of
          the project -->
        <karaf.feature.file>${project.artifactId}.xml</karaf.feature.file>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-artifacts</id>
                <phase>package</phase>
                <goals>
                  <goal>attach-artifact</goal>
                </goals>
                <configuration>
                  <artifacts>
                    <artifact>
                      <file>${karaf.feature.file}</file>
                      <classifier>features</classifier>
                      <type>xml</type>
                    </artifact>
                  </artifacts>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>karaf-generated-feature-profile</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(osgi),file(profiles/karaf-generated-feature))</value>
        </property>
      </activation>
      <!--suppress GrazieInspection -->
      <properties>
        <!-- Redefine the feature file since it's now generated -->
        <karaf.feature.file>${project.build.directory}/generated-fmpp/${project.artifactId}.xml</karaf.feature.file>
        <!-- The list of projects that should not be locked (groupId:artifactId:type:version format). This is what should 
          be overridden by child projects -->
        <karaf.dont.lock.snapshots></karaf.dont.lock.snapshots>
        <!-- The combination of the karaf.dont.lock.snapshots and an explicit not locking of ourselves -->
        <karaf.dont.lock.snapshots.final>${karaf.dont.lock.snapshots}${project.groupId}:${project.artifactId}:jar:${project.version}</karaf.dont.lock.snapshots.final>
        <!-- The file containing the library scripts needed to generate the karaf feature -->
        <karaf.freemarker.script>com.diamondq.osgi:osgi-feature.scripts:2.2.0:zip</karaf.freemarker.script>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-help-plugin</artifactId>
            <executions>
              <execution>
                <id>generate-effective</id>
                <phase>validate</phase>
                <goals>
                  <goal>effective-pom</goal>
                </goals>
                <configuration>
                  <output>${project.build.directory}/.effective-pom.xml</output>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>lock-snapshots</id>
                <phase>validate</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
                <configuration>
                  <executable>mvn</executable>
                  <toolchain>mvn</toolchain>
                  <arguments>
                    <argument>-q</argument>
                    <argument>-f</argument>
                    <argument>${project.build.directory}/.effective-pom.xml</argument>
                    <argument>versions:lock-snapshots</argument>
                    <argument>-Dexcludes=${karaf.dont.lock.snapshots.final}</argument>
                    <argument>-DexcludeReactor=false</argument>
                  </arguments>
                </configuration>
              </execution>
              <execution>
                <id>generate-pom-json</id>
                <phase>validate</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
                <configuration>
                  <executable>mvn</executable>
                  <toolchain>mvn</toolchain>
                  <arguments>
                    <argument>-q</argument>
                    <argument>-f</argument>
                    <argument>${project.build.directory}/.effective-pom.xml</argument>
                    <argument>com.github.ferstl:depgraph-maven-plugin:3.1.0:graph</argument>
                    <argument>-DgraphFormat=json</argument>
                    <argument>-DshowDuplicates=true</argument>
                  </arguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>unpack-scripts</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>unpack</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/scripts</outputDirectory>
                  <artifact>${karaf.freemarker.script}</artifact>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-code</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/scripts</outputDirectory>
                  <resources>
                    <resource>
                      <directory>src/main/resources/fmpp</directory>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.googlecode.fmpp-maven-plugin</groupId>
            <artifactId>fmpp-maven-plugin</artifactId>
            <executions>
              <execution>
                <phase>generate-sources</phase>
                <goals>
                  <goal>generate</goal>
                </goals>
                <configuration>
                  <cfgFile>src/main/resources/config.fmpp</cfgFile>
                  <outputDirectory>target/generated-fmpp/</outputDirectory>
                  <templateDirectory>target/scripts</templateDirectory>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.31</version>
              </dependency>
              <dependency>
                <groupId>net.sourceforge.fmpp</groupId>
                <artifactId>fmpp</artifactId>
                <version>0.9.16</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- ****************************************************************************************************************** 
      ASCIIDoc based -->
    <!-- Generate the ASCII Documentation -->
    <profile>
      <id>generate-asciidoc</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>file(src/main/asciidoc)</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <dependencies>
              <dependency>
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctorj-diagram</artifactId>
                <version>2.2.1</version>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <id>output-html</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>process-asciidoc</goal>
                </goals>
                <configuration>
                  <backend>html</backend>
                  <preserveDirectories>true</preserveDirectories>
                  <attributes>
                    <source-highlighter>coderay</source-highlighter>
                    <toc>left</toc>
                    <revnumber>${project.version}</revnumber>
                    <revdate>${maven.build.timestamp}</revdate>
                    <organization>${project.organization.name}</organization>
                  </attributes>
                  <requires>
                    <require>asciidoctor-diagram</require>
                  </requires>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Picocli -->
    <profile>
      <id>picocli</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/picocli))</value>
        </property>
      </activation>
      <properties>
        <picocli.version>4.6.3</picocli.version>
      </properties>
      <dependencies>
        <dependency>
          <groupId>info.picocli</groupId>
          <artifactId>picocli</artifactId>
          <version>${picocli.version}</version>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<configuration>
			  <annotationProcessorPaths combine.children="append">
				<path>
				  <groupId>info.picocli</groupId>
				  <artifactId>picocli-codegen</artifactId>
				  <version>${picocli.version}</version>
				</path>
			  </annotationProcessorPaths>
			</configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Jacoco -->
    <profile>
      <id>jacoco-generate</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/jacoco-generate))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>default-prepare-agent</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- ****************************************************************************************************************** 
      GraalVM Support -->
    <!-- Build Native Image -->
    <profile>
      <id>graal-native-image</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/graal-native-image))</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-toolchains-plugin</artifactId>
            <executions>
              <execution>
                <id>default</id>
                <phase>validate</phase>
                <configuration>
                  <toolchains>
                    <jdk>
                      <vendor>graal</vendor>
                    </jdk>
                  </toolchains>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Build Paths -->
    <profile>
      <id>build-paths</id>
      <activation>
        <property>
          <name>[DIAMONDQ]</name>
          <value>and(type(java),file(profiles/build-paths))</value>
        </property>
      </activation>
      <properties>
        <build-paths-projectdir>${project.basedir}/..</build-paths-projectdir>
        <build-paths-groupId></build-paths-groupId>
      </properties>
      <dependencies>
        <dependency>
          <groupId>com.diamondq.path-expander</groupId>
          <artifactId>path-expander-main</artifactId>
          <version>0.1.0-SNAPSHOT</version>
          <classifier>all</classifier>
          <scope>provided</scope>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>export-classpaths</id>
                <phase>initialize</phase>
                <goals>
                  <goal>resolve</goal>
                </goals>
                <configuration>
                  <outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename>
                  <outputFile>${project.build.directory}/build-paths/export.txt</outputFile>
                  <outputScope>true</outputScope>
                  <sort>true</sort>
                  <excludeScope>provided</excludeScope>
                </configuration>
              </execution>
              <execution>
                <id>get-properties</id>
                <phase>initialize</phase>
                <goals>
                  <goal>properties</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>process-dev-exported-classpaths</id>
                <phase>initialize</phase>
                <goals>
                  <goal>java</goal>
                </goals>
                <configuration>
                  <mainClass>com.diamondq.pathexpander.Expand</mainClass>
                  <includeProjectDependencies>false</includeProjectDependencies>
                  <additionalClasspathElements>
                    <additionalClasspathElement>${com.diamondq.path-expander:path-expander-main:jar:all}</additionalClasspathElement>
                  </additionalClasspathElements>
                  <arguments>
                    <argument>--resolvePath=${project.build.directory}/build-paths/export.txt</argument>
                    <argument>--projectPath=${build-paths-projectdir}</argument>
                    <argument>--groupId=${build-paths-groupId}</argument>
                    <argument>--name=projectdir</argument>
                    <argument>pathFile</argument>
                    <argument>--format=TEXT</argument>
                    <argument>--dev</argument>
                    <argument>--outputFile=${project.build.directory}/build-paths/dev-path.txt</argument>
                  </arguments>
                </configuration>
              </execution>
              <execution>
                <id>process-prod-exported-classpaths</id>
                <phase>initialize</phase>
                <goals>
                  <goal>java</goal>
                </goals>
                <configuration>
                  <mainClass>com.diamondq.pathexpander.Expand</mainClass>
                  <includeProjectDependencies>false</includeProjectDependencies>
                  <additionalClasspathElements>
                    <additionalClasspathElement>${com.diamondq.path-expander:path-expander-main:jar:all}</additionalClasspathElement>
                  </additionalClasspathElements>
                  <arguments>
                    <argument>--resolvePath=${project.build.directory}/build-paths/export.txt</argument>
                    <argument>--projectPath=${build-paths-projectdir}</argument>
                    <argument>--groupId=${build-paths-groupId}</argument>
                    <argument>--name=projectdir</argument>
                    <argument>pathFile</argument>
                    <argument>--format=TEXT</argument>
                    <argument>--outputFile=${project.build.directory}/build-paths/prod-path.txt</argument>
                  </arguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>default</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
    </profile>
  </profiles>
  <build>
    <pluginManagement>
      <plugins>
        <!-- Core Plugins -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>3.0.0-M1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>3.0.0-M4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>
          <version>3.0.0-M1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.9.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${plugins.surefire.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-verifier-plugin</artifactId>
          <version>1.1</version>
        </plugin>
        <!-- Packaging Plugins -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-ear-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-ejb-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-rar-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.3.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-acr-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>3.2.4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.2.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jlink-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jmod-plugin</artifactId>
          <version>3.0.0-alpha-1</version>
        </plugin>
        <!-- Reporting plugins -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-changelog-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-changes-plugin</artifactId>
          <version>2.12.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>3.1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-doap-plugin</artifactId>
          <version>1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-docck-plugin</artifactId>
          <version>1.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.3.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jdeps-plugin</artifactId>
          <version>3.1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jxr-plugin</artifactId>
          <version>3.1.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-linkcheck-plugin</artifactId>
          <version>1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <version>3.15.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-report-plugin</artifactId>
          <version>3.0.0-M4</version>
        </plugin>
        <!-- Tool plugins -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-ant-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.3.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>3.0.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-help-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-invoker-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jarsigner-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jdeprscan-plugin</artifactId>
          <version>3.0.0-alpha-1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-patch-plugin</artifactId>
          <version>1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pdf-plugin</artifactId>
          <version>1.4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.5.3</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-remote-resources-plugin</artifactId>
          <version>1.7.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-repository-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-plugin</artifactId>
          <version>1.12.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-publish-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-stage-plugin</artifactId>
          <version>1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-toolchains-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- Other plugins -->
        <plugin>
          <groupId>org.asciidoctor</groupId>
          <artifactId>asciidoctor-maven-plugin</artifactId>
          <version>2.2.1</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>aspectj-maven-plugin</artifactId>
          <version>1.14.0</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>animal-sniffer-maven-plugin</artifactId>
          <version>1.20</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>buildnumber-maven-plugin</artifactId>
          <version>1.4</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.gmavenplus</groupId>
          <artifactId>gmavenplus-plugin</artifactId>
          <version>1.13.0</version>
        </plugin>
        <plugin>
          <groupId>com.carrotgarden.maven</groupId>
          <artifactId>flatten-maven-plugin</artifactId>
          <version>1.7.20200503171255</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>flatten-maven-plugin</artifactId>
          <version>1.2.7</version>
        </plugin>
        <plugin>
          <groupId>com.diamondq.maven</groupId>
          <artifactId>i18n-maven-plugin</artifactId>
          <version>1.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.7</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>keytool-maven-plugin</artifactId>
          <version>1.5</version>
        </plugin>
        <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <version>5.1.2</version>
        </plugin>
        <plugin>
          <groupId>org.sonatype.plugins</groupId>
          <artifactId>nexus-staging-maven-plugin</artifactId>
          <version>1.6.12</version>
        </plugin>
        <plugin>
          <groupId>com.diamondq.maven</groupId>
          <artifactId>osgi-target-maven-plugin</artifactId>
          <version>1.0.3</version>
        </plugin>
        <plugin>
          <groupId>com.diamondq.maven</groupId>
          <artifactId>javahome-resolver-maven-plugin</artifactId>
          <version>1.0.2</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>2.8.1</version>
        </plugin>
        <plugin>
          <groupId>com.googlecode.fmpp-maven-plugin</groupId>
          <artifactId>fmpp-maven-plugin</artifactId>
          <version>1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.karaf.tooling</groupId>
          <artifactId>karaf-maven-plugin</artifactId>
          <version>4.3.3</version>
        </plugin>
        <plugin>
          <groupId>org.antlr</groupId>
          <artifactId>antlr4-maven-plugin</artifactId>
          <version>4.9.2</version>
        </plugin>
        <plugin>
          <groupId>org.jboss.jandex</groupId>
          <artifactId>jandex-maven-plugin</artifactId>
          <version>1.2.1</version>
        </plugin>
        <plugin>
          <groupId>org.openapitools</groupId>
          <artifactId>openapi-generator-maven-plugin</artifactId>
          <version>5.2.1</version>
        </plugin>
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <versionRange>[1.6.0,)</versionRange>
                    <goals>
                      <goal>java</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <versionRange>[3.1.2,)</versionRange>
                    <goals>
                      <goal>resolve</goal>
                      <goal>properties</goal>
                      <goal>build-classpath</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.asciidoctor</groupId>
                    <artifactId>asciidoctor-maven-plugin</artifactId>
                    <versionRange>[1.5.7.1,)</versionRange>
                    <goals>
                      <goal>process-asciidoc</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>com.carrotgarden.maven</groupId>
                    <artifactId>flatten-maven-plugin</artifactId>
                    <versionRange>[1.4,)</versionRange>
                    <goals>
                      <goal>flatten</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.karaf.tooling</groupId>
                    <artifactId>karaf-maven-plugin</artifactId>
                    <versionRange>[4.2.2,)</versionRange>
                    <goals>
                      <goal>features-add-to-repository</goal>
                      <goal>assembly</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <versionRange>[1.8,)</versionRange>
                    <goals>
                      <goal>run</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-toolchains-plugin</artifactId>
                    <versionRange>[3.0,)</versionRange>
                    <goals>
                      <goal>toolchain</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>com.diamondq.maven</groupId>
                    <artifactId>osgi-target-maven-plugin</artifactId>
                    <versionRange>[1.0,)</versionRange>
                    <goals>
                      <goal>build-target</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.codehaus.gmavenplus</groupId>
                    <artifactId>gmavenplus-plugin</artifactId>
                    <versionRange>[1.7.1,)</versionRange>
                    <goals>
                      <goal>execute</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>com.diamondq.maven</groupId>
                    <artifactId>javahome-resolver-maven-plugin</artifactId>
                    <versionRange>[1.0.0,)</versionRange>
                    <goals>
                      <goal>resolve</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>com.github.genthaler</groupId>
                    <artifactId>beanshell-maven-plugin</artifactId>
                    <versionRange>1.4</versionRange>
                    <goals>
                      <goal>run</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-plugin-plugin</artifactId>
                    <versionRange>3.6.0</versionRange>
                    <goals>
                      <goal>helpmojo</goal>
                      <goal>descriptor</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.jboss.jandex</groupId>
                    <artifactId>jandex-maven-plugin</artifactId>
                    <versionRange>[1.0.7,)</versionRange>
                    <goals>
                      <goal>jandex</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore></ignore>
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.sonatype.plugins</groupId>
        <artifactId>nexus-staging-maven-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <autoReleaseAfterClose>${nexus.auto.release}</autoReleaseAfterClose>
          <skipLocalStaging>${nexus.skip.local.staging}</skipLocalStaging>
          <skipStaging>${nexus.skip.staging}</skipStaging>
          <serverId>${nexus.serverId}</serverId>
          <nexusUrl>${nexus.url}</nexusUrl>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-maven</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <!-- The enforcer plugin 3.0.0-M2 regresses on requirePluginVersions (see MENFORCER-306). Disabling until 
                  fixed. -->
                <!-- <requirePluginVersions /> -->
                <requireMavenVersion>
                  <version>3.6.3</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>