<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.flowlogix</groupId>
    <artifactId>base-pom</artifactId>
    <version>128</version>
  </parent>
  <artifactId>infra-pom</artifactId>
  <version>128</version>
  <packaging>pom</packaging>
  <name>Infrastructure POM</name>
  <description>Opinionated infrastructure to be used as parent POM</description>
  <distributionManagement>
    <snapshotRepository>
      <id>flowlogix-maven-central-portal</id>
      <url>${nexus.url}/repository/maven-snapshots</url>
    </snapshotRepository>
    <site child.site.url.inherit.append.path="false">
      <url>${project.url}</url>
    </site>
  </distributionManagement>
  <properties>
    <project.build.outputTimestamp>2026-06-21T04:55:31Z</project.build.outputTimestamp>
    <docs.phase>deploy</docs.phase>
    <delombok.phase>none</delombok.phase>
    <snippet.path.p1>${project.build.sourceDirectory}</snippet.path.p1>
    <snippet.path.p2>${project.build.testSourceDirectory}</snippet.path.p2>
    <snippet.path.p3>${project.basedir}/src/demo/java</snippet.path.p3>
    <snippet.path>${snippet.path.p1}:${snippet.path.p2}:${snippet.path.p3}</snippet.path>
    <release.profile>flowlogix-central-portal</release.profile>
    <release.profiles>${release.profile}</release.profiles>
    <gpg.keyname>Flow Logix, Inc.</gpg.keyname>
    <staging.server>flowlogix-maven-central-portal</staging.server>
    <nexus.url>https://central.sonatype.com</nexus.url>
    <arquillian.container></arquillian.container>
    <drone.browser>chromeheadless</drone.browser>
    <jacocoAddress>localhost</jacocoAddress>
    <jacocoPort>52212</jacocoPort>
    <jacocoReset>true</jacocoReset>
    <jacocoAgent></jacocoAgent>
    <jacoco.classDumpDir>${maven.multiModuleProjectDirectory}/target/classes</jacoco.classDumpDir>
    <argLine></argLine>
    <jdk11SurefireOptions>-Xshare:off</jdk11SurefireOptions>
    <jdk11FailsafeOptions></jdk11FailsafeOptions>
    <mockito.agentOptions>-javaagent:${org.mockito:mockito-core:jar}</mockito.agentOptions>
    <compiler.show.warnings>true</compiler.show.warnings>
    <compiler.deprecation.arg>-Xlint:deprecation</compiler.deprecation.arg>
    <compiler.unchecked.arg>-Xlint:unchecked</compiler.unchecked.arg>
    <compiler.parameters.arg>-parameters</compiler.parameters.arg>
    <compiler.annotation.processing></compiler.annotation.processing>
    <junit5.parallel.tests.enabled>true</junit5.parallel.tests.enabled>
    <junit5.parallel.tests.mode>concurrent</junit5.parallel.tests.mode>
    <test.parallel>classes</test.parallel>
    <it.test.parallel>${test.parallel}</it.test.parallel>
    <shrinkwrap.compile.skip>true</shrinkwrap.compile.skip>
    <shrinkwrap.decryption.ignore>true</shrinkwrap.decryption.ignore>
    <test.containers.jdk.turnOffSVE>false</test.containers.jdk.turnOffSVE>
    <test.thread.count>10</test.thread.count>
    <test.run.order>random</test.run.order>
    <test.redirect.to.file>true</test.redirect.to.file>
    <deploy.at-end>true</deploy.at-end>
    <deploy.retry-failed-count>5</deploy.retry-failed-count>
    <jar.skip-if-empty>true</jar.skip-if-empty>
    <japicmp.skip>true</japicmp.skip>
    <javadoc.doclint>all,-reference</javadoc.doclint>
    <javadoc.sourcepath>${project.build.sourceDirectory}
            :${project.build.directory}/generated-sources/annotations</javadoc.sourcepath>
    <javadoc.snippet.path>${snippet.path}</javadoc.snippet.path>
    <javadoc.snippet.path.options>--snippet-path ${javadoc.snippet.path}</javadoc.snippet.path.options>
    <checkstyle.configLocation>checkstyle.xml</checkstyle.configLocation>
    <checkstyle.headerLocation>flowlogix-header.txt</checkstyle.headerLocation>
    <checkstyle.suppressionsLocation></checkstyle.suppressionsLocation>
    <checkstyle.excludes>**/module-info.java</checkstyle.excludes>
    <ear.defaultLibBundleDir>lib</ear.defaultLibBundleDir>
    <ear.skinnyWars>true</ear.skinnyWars>
    <ear.skipClassPathModification>true</ear.skipClassPathModification>
    <jdk.minimum.version>${maven.compiler.release}</jdk.minimum.version>
    <maven.minimum.version>3.8</maven.minimum.version>
    <jakarta.ee10.version>10.0.0</jakarta.ee10.version>
    <jakarta.ee.version>11.0.0</jakarta.ee.version>
    <lombok.version>1.18.46</lombok.version>
    <lombok.javadoc.version>${lombok.version}</lombok.javadoc.version>
    <shrinkwrap.api.version>1.2.6</shrinkwrap.api.version>
    <shrinkwrap.resolver.version>3.3.7</shrinkwrap.resolver.version>
    <mockito.version>5.23.0</mockito.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-core-api</artifactId>
        <version>${jakarta.ee.version}</version>
        <scope>provided</scope>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-api</artifactId>
        <version>${shrinkwrap.api.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-depchain</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <type>pom</type>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-spi</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api-maven</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-spi-maven</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api-maven-archive</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven-archive</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api-maven-embedded</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven-embedded</artifactId>
        <version>${shrinkwrap.resolver.version}</version>
        <optional>true</optional>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.15</version>
          <configuration>
            <address>${jacocoAddress}</address>
            <port>${jacocoPort}</port>
            <reset>${jacocoReset}</reset>
            <propertyName>jacocoAgent</propertyName>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <showWarnings>${compiler.show.warnings}</showWarnings>
            <compilerArgs combine.children="append">
              <arg>${compiler.deprecation.arg}</arg>
              <arg>${compiler.unchecked.arg}</arg>
              <arg>${compiler.parameters.arg}</arg>
            </compilerArgs>
            <proc>${compiler.annotation.processing}</proc>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <parallel>${test.parallel}</parallel>
            <threadCount>${test.thread.count}</threadCount>
            <runOrder>${test.run.order}</runOrder>
            <redirectTestOutputToFile>${test.redirect.to.file}</redirectTestOutputToFile>
            <argLine>@{argLine} @{jacocoAgent} @{jdk11SurefireOptions} ${mockito.agentOptions}</argLine>
            <properties>
              <configurationParameters>junit.jupiter.execution.parallel.enabled = ${junit5.parallel.tests.enabled}
                                junit.jupiter.execution.parallel.mode.default = ${junit5.parallel.tests.mode}</configurationParameters>
            </properties>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-failsafe-plugin</artifactId>
          <executions>
            <execution>
              <id>integration-test</id>
              <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <parallel>${it.test.parallel}</parallel>
            <threadCount>${test.thread.count}</threadCount>
            <runOrder>${test.run.order}</runOrder>
            <redirectTestOutputToFile>${test.redirect.to.file}</redirectTestOutputToFile>
            <argLine>@{argLine} @{jacocoAgent} @{jdk11FailsafeOptions} ${mockito.agentOptions}</argLine>
            <systemPropertyVariables combine.children="append">
              <arquillian.launch>${arquillian.container}</arquillian.launch>
              <webdriver.browser>${drone.browser}</webdriver.browser>
              <test.containers.jdk.turn-off-sve>${test.containers.jdk.turnOffSVE}</test.containers.jdk.turn-off-sve>
              <org.jboss.shrinkwrap.resolver.maven.skipCompilation>${shrinkwrap.compile.skip}</org.jboss.shrinkwrap.resolver.maven.skipCompilation>
              <org.jboss.shrinkwrap.resolver.maven.ignoreDecryptionProblems>${shrinkwrap.decryption.ignore}</org.jboss.shrinkwrap.resolver.maven.ignoreDecryptionProblems>
            </systemPropertyVariables>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <executions>
            <execution>
              <id>attach-sources</id>
              <phase>${docs.phase}</phase>
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <phase>${docs.phase}</phase>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <sourcepath>${javadoc.sourcepath}</sourcepath>
            <doclint>${javadoc.doclint}</doclint>
            <additionalOptions>${javadoc.snippet.path.options}</additionalOptions>
            <links combine.children="append">
              <link>https://jakarta.ee/specifications/platform/${jakarta.ee.parsed.majorVersion}/apidocs</link>
              <link>https://projectlombok.org/api/</link>
            </links>
            <notimestamp>true</notimestamp>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok-maven-plugin</artifactId>
          <version>1.18.20.0</version>
          <executions>
            <execution>
              <phase>${delombok.phase}</phase>
              <goals>
                <goal>delombok</goal>
              </goals>
            </execution>
          </executions>
          <dependencies>
            <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <version>${lombok.version}</version>
            </dependency>
          </dependencies>
          <configuration>
            <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
            <addOutputDirectory>false</addOutputDirectory>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <configuration>
            <deployAtEnd>${deploy.at-end}</deployAtEnd>
            <retryFailedDeploymentCount>${deploy.retry-failed-count}</retryFailedDeploymentCount>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <configuration>
            <autoVersionSubmodules>true</autoVersionSubmodules>
            <pushChanges>false</pushChanges>
            <localCheckout>true</localCheckout>
            <mavenExecutorId>forked-path</mavenExecutorId>
            <preparationGoals>validate</preparationGoals>
            <preparationProfiles>skip-checkstyle</preparationProfiles>
            <releaseProfiles>${release.profiles},docs,release-plugins</releaseProfiles>
            <tagNameFormat>Version-@{project.version}</tagNameFormat>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>3.2.8</version>
          <executions>
            <execution>
              <id>sign-artifacts</id>
              <goals>
                <goal>sign</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-shade-plugin</artifactId>
          <version>3.6.2</version>
        </plugin>
        <plugin>
          <groupId>org.cyclonedx</groupId>
          <artifactId>cyclonedx-maven-plugin</artifactId>
          <version>2.9.1</version>
          <executions>
            <execution>
              <phase>package</phase>
              <goals>
                <goal>makeAggregateBom</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-ear-plugin</artifactId>
          <configuration>
            <defaultLibBundleDir>${ear.defaultLibBundleDir}</defaultLibBundleDir>
            <skinnyWars>${ear.skinnyWars}</skinnyWars>
            <skipClassPathModification>${ear.skipClassPathModification}</skipClassPathModification>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-maven-java</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules combine.children="append">
                <requireMavenVersion>
                  <version>${maven.minimum.version}</version>
                </requireMavenVersion>
                <requireJavaVersion>
                  <version>${jdk.minimum.version}</version>
                  <message>Required JDK version to build is at least ${maven.compiler.release}</message>
                </requireJavaVersion>
                <dependencyConvergence />
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>enforce-maven-ban-junit4</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>junit:junit</exclude>
                  </excludes>
                  <message>JUnit 4 is prohibited</message>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-failsafe-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-javadoc-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>add-properties</id>
            <goals>
              <goal>properties</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.6.1</version>
        <executions>
          <execution>
            <id>add-demos-parse-version</id>
            <phase>validate</phase>
            <goals>
              <goal>add-test-source</goal>
              <goal>parse-version</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/demo/java</source>
                <source>target/generated-test-sources/test-annotations</source>
              </sources>
              <versionString>${jakarta.ee.version}</versionString>
              <propertyPrefix>jakarta.ee.parsed</propertyPrefix>
            </configuration>
          </execution>
          <execution>
            <id>add-jpa-metamodel</id>
            <phase>validate</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>target/generated-sources/annotations</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>3.6.0</version>
        <executions>
          <execution>
            <phase>validate</phase>
            <goals>
              <goal>checkstyle</goal>
            </goals>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>com.puppycrawl.tools</groupId>
            <artifactId>checkstyle</artifactId>
            <version>13.6.0</version>
          </dependency>
          <dependency>
            <groupId>com.flowlogix</groupId>
            <artifactId>checkstyle</artifactId>
            <version>128</version>
          </dependency>
        </dependencies>
        <configuration>
          <configLocation>${checkstyle.configLocation}</configLocation>
          <headerLocation>${checkstyle.headerLocation}</headerLocation>
          <suppressionsLocation>${checkstyle.suppressionsLocation}</suppressionsLocation>
          <linkXRef>true</linkXRef>
          <consoleOutput>true</consoleOutput>
          <failsOnError>true</failsOnError>
          <failOnViolation>true</failOnViolation>
          <includeTestSourceDirectory>true</includeTestSourceDirectory>
          <enableRulesSummary>true</enableRulesSummary>
          <excludes>${checkstyle.excludes}</excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.github.siom79.japicmp</groupId>
        <artifactId>japicmp-maven-plugin</artifactId>
        <version>0.26.1</version>
        <executions>
          <execution>
            <phase>verify</phase>
            <goals>
              <goal>cmp</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <parameter>
            <breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
            <breakBuildOnSourceIncompatibleModifications>true</breakBuildOnSourceIncompatibleModifications>
            <onlyModified>true</onlyModified>
          </parameter>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <reporting>
    <plugins>
      <plugin>
        <artifactId>maven-jxr-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>
  <profiles>
    <profile>
      <id>maven4-required</id>
      <properties>
        <maven.minimum.version>[4.0.0-rc,)</maven.minimum.version>
      </properties>
    </profile>
    <profile>
      <id>annotation-processing-full</id>
      <activation>
        <jdk>[21,)</jdk>
      </activation>
      <properties>
        <compiler.annotation.processing>full</compiler.annotation.processing>
      </properties>
    </profile>
    <profile>
      <id>flowlogix-central-portal</id>
      <distributionManagement>
        <repository>
          <id>${staging.server}</id>
          <url>https://repo.maven.apache.org/maven2</url>
        </repository>
      </distributionManagement>
    </profile>
    <profile>
      <id>javadoc-syntax-highlighting</id>
      <activation>
        <jdk>[25,)</jdk>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <configuration>
              <additionalOptions>--syntax-highlight ${javadoc.snippet.path.options}</additionalOptions>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>release-to-flowlogix</id>
      <distributionManagement>
        <repository>
          <id>${staging.server}</id>
          <url>${nexus.url}/repository/maven-releases/</url>
        </repository>
      </distributionManagement>
      <properties>
        <staging.server>flowlogix-nexus-artifacts</staging.server>
        <nexus.url>https://nexus.flowlogix.com</nexus.url>
      </properties>
    </profile>
    <profile>
      <id>docs</id>
      <properties>
        <docs.phase>package</docs.phase>
      </properties>
    </profile>
    <profile>
      <id>release-plugins</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-gpg-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.cyclonedx</groupId>
            <artifactId>cyclonedx-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>skip-checkstyle</id>
      <activation>
        <property>
          <name>checkstyle.skip</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <executions>
              <execution>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>include-flowlogix-bom</id>
      <activation>
        <property>
          <name>!flowlogix.bom.skip</name>
        </property>
      </activation>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>com.flowlogix</groupId>
            <artifactId>flowlogix-bom</artifactId>
            <version>35</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
    </profile>
    <profile>
      <id>skinny-war</id>
      <activation>
        <property>
          <name>skinny.war</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
              <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>coverage</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.jacoco</groupId>
              <artifactId>jacoco-maven-plugin</artifactId>
              <executions>
                <execution>
                  <goals>
                    <goal>prepare-agent</goal>
                  </goals>
                </execution>
              </executions>
              <configuration>
                <fileSets>
                  <fileSet>
                    <directory>${project.basedir}</directory>
                    <includes>
                      <include>**/*.exec</include>
                    </includes>
                  </fileSet>
                </fileSets>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
  </profiles>
</project>