<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>io.camunda</groupId>
    <artifactId>zeebe-bom</artifactId>
    <version>8.5.16</version>
    <relativePath>../bom/pom.xml</relativePath>
  </parent>

  <artifactId>zeebe-parent</artifactId>
  <packaging>pom</packaging>

  <name>Zeebe Parent</name>
  <url>http://zeebe.io/</url>
  <inceptionYear>2017</inceptionYear>

  <licenses>
    <license>
      <name>Zeebe Community License v1.1</name>
      <url>https://zeebe.io/legal/zeebe-community-license-1.1</url>
    </license>
  </licenses>

  <properties>
    <version.java>21</version.java>

    <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
    <!-- disable jdk8 javadoc checks on release build -->
    <additionalparam>-Xdoclint:none</additionalparam>
    <checkstyle.config.location>.checkstyle.xml</checkstyle.config.location>
    <spotbugs.include>spotbugs/spotbugs-include.xml</spotbugs.include>
    <spotbugs.exclude>spotbugs/spotbugs-exclude.xml</spotbugs.exclude>
    <maven-profiler-report-directory>${project.build.directory}/profiler</maven-profiler-report-directory>

    <!-- EXTERNAL LIBS -->
    <version.agrona>1.20.0</version.agrona>
    <version.assertj>3.25.3</version.assertj>
    <version.awaitility>4.2.2</version.awaitility>
    <version.bouncycastle>1.78.1</version.bouncycastle>
    <version.camunda>7.22.0</version.camunda>
    <version.checkstyle>10.14.2</version.checkstyle>
    <version.commons-lang>3.14.0</version.commons-lang>
    <version.commons-logging>1.3.5</version.commons-logging>
    <version.commons-math>3.6.1</version.commons-math>
    <version.commons-codec>1.16.1</version.commons-codec>
    <version.commons-compress>1.26.2</version.commons-compress>
    <version.zstd-jni>1.5.7-1</version.zstd-jni>
    <version.commons-text>1.11.0</version.commons-text>
    <version.cron-utils>9.2.1</version.cron-utils>
    <version.docker-java-api>3.3.6</version.docker-java-api>
    <version.elasticsearch>8.9.2</version.elasticsearch>
    <version.error-prone>2.26.1</version.error-prone>
    <version.grpc>1.65.1</version.grpc>
    <version.gson>2.10.1</version.gson>
    <version.guava>33.1.0-jre</version.guava>
    <version.hamcrest>2.2</version.hamcrest>
    <version.httpasyncclient>4.1.5</version.httpasyncclient>
    <version.httpclient>4.5.14</version.httpclient>
    <version.httpclient5>5.4.2</version.httpclient5>
    <version.httpcore5>5.3.3</version.httpcore5>
    <version.httpcomponents>4.4.16</version.httpcomponents>
    <version.identity>8.5.14</version.identity>
    <version.jackson>2.18.3</version.jackson>
    <version.jna>5.14.0</version.jna>
    <version.junit>5.10.3</version.junit>
    <version.junit4>4.13.2</version.junit4>
    <version.log4j>2.23.1</version.log4j>
    <version.minlog>1.3.1</version.minlog>
    <version.mockito>5.11.0</version.mockito>
    <version.model>7.7.0</version.model>
    <version.msgpack>0.9.9</version.msgpack>
    <version.netty>4.1.119.Final</version.netty>
    <version.objenesis>3.3</version.objenesis>
    <version.opensearch>2.5.0</version.opensearch>
    <version.opensearch.testcontainers>2.0.2</version.opensearch.testcontainers>
    <version.prometheus>0.16.0</version.prometheus>
    <version.protobuf>3.25.6</version.protobuf>
    <version.protobuf-common>2.37.1</version.protobuf-common>
    <version.micrometer>1.13.11</version.micrometer>
    <version.rocksdbjni>8.11.4</version.rocksdbjni>
    <version.sbe>1.30.0</version.sbe>
    <version.scala>2.13.16</version.scala>
    <version.slf4j>2.0.17</version.slf4j>
    <version.snakeyaml>2.2</version.snakeyaml>
    <version.javax>1.3.2</version.javax>
    <version.wiremock>3.4.2</version.wiremock>
    <version.conscrypt>2.5.2</version.conscrypt>
    <version.asm>9.3</version.asm>
    <version.testcontainers>1.19.8</version.testcontainers>
    <version.netflix.concurrency>0.4.2</version.netflix.concurrency>
    <version.zeebe-test-container>3.6.5</version.zeebe-test-container>
    <version.feel-scala>1.17.8</version.feel-scala>
    <version.dmn-scala>1.9.0</version.dmn-scala>
    <version.rest-assured>5.4.0</version.rest-assured>
    <version.spring>6.1.14</version.spring>
    <version.spring-security>6.2.7</version.spring-security>
    <version.spring-boot>3.3.9</version.spring-boot>
    <version.concurrentunit>0.4.6</version.concurrentunit>
    <version.kryo>5.6.2</version.kryo>
    <version.failsafe>2.4.4</version.failsafe>
    <version.jetbrains-annotations>24.1.0</version.jetbrains-annotations>
    <version.jqwik>1.8.5</version.jqwik>
    <version.jmock>2.13.1</version.jmock>
    <version.jmh>1.37</version.jmh>
    <version.json-smart>2.5.2</version.json-smart>
    <version.byte-buddy>1.14.19</version.byte-buddy>
    <version.revapi>0.28.1</version.revapi>
    <version.resilience4j>2.2.0</version.resilience4j>
    <version.immutables>2.10.1</version.immutables>
    <version.jsr305>3.0.2</version.jsr305>
    <version.classgraph>4.8.179</version.classgraph>
    <version.servlet-api>2.5</version.servlet-api>
    <version.osgi>6.0.0</version.osgi>
    <version.findbugs-annotations>3.0.1u2</version.findbugs-annotations>
    <version.spotbugs>4.8.6</version.spotbugs>
    <version.archunit>1.2.1</version.archunit>
    <version.easy-random>5.0.0</version.easy-random>
    <version.jcip>1.0</version.jcip>
    <version.jnr-posix>3.1.20</version.jnr-posix>
    <version.zpt>8.4.5</version.zpt>
    <version.feign>13.2.1</version.feign>
    <version.google-sdk>26.34.0</version.google-sdk>
    <version.azure-sdk>1.2.31</version.azure-sdk>
    <version.awssdk>2.25.70</version.awssdk>
    <version.toxiproxy>2.1.7</version.toxiproxy>
    <version.validation-api>3.0.2</version.validation-api>
    <version.jackson-databind-nullable>0.2.6</version.jackson-databind-nullable>
    <version.findbugs.jsr305>3.0.2</version.findbugs.jsr305>
    <version.jackson-annotations>2.17.2</version.jackson-annotations>
    <version.swagger-annotations>2.2.28</version.swagger-annotations>
    <version.checker-qual>3.42.0</version.checker-qual>
    <version.java-jwt>4.4.0</version.java-jwt>
    <version.reactive-streams>1.0.4</version.reactive-streams>
    <version.postgresql>42.7.5</version.postgresql>
    <version.aws-signing>2.3.1</version.aws-signing>
    <version.reactor-netty>1.1.23</version.reactor-netty>
    <version.tc-keycloak>3.3.1</version.tc-keycloak>
    <version.jakarta-activation>2.1.3</version.jakarta-activation>
    <version.jakarta.json-api>2.1.3</version.jakarta.json-api>
    <version.jakarta-annotation>2.1.1</version.jakarta-annotation>
    <version.jna-platform>5.13.0</version.jna-platform>

    <!-- maven plugins -->
    <plugin.version.antrun>3.1.0</plugin.version.antrun>
    <plugin.version.appassembler>2.1.0</plugin.version.appassembler>
    <plugin.version.assembly>3.7.1</plugin.version.assembly>
    <plugin.version.build-helper>3.5.0</plugin.version.build-helper>
    <plugin.version.checkstyle>3.3.1</plugin.version.checkstyle>
    <plugin.version.compiler>3.12.1</plugin.version.compiler>
    <plugin.version.dependency-analyzer>1.13.2</plugin.version.dependency-analyzer>
    <plugin.version.dependency>3.6.1</plugin.version.dependency>
    <plugin.version.enforcer>3.4.1</plugin.version.enforcer>
    <plugin.version.exec>3.4.1</plugin.version.exec>
    <plugin.version.failsafe>3.2.5</plugin.version.failsafe>
    <plugin.version.flaky-tests>2.1.1</plugin.version.flaky-tests>
    <plugin.version.jacoco>0.8.12</plugin.version.jacoco>
    <plugin.version.maven-jar>3.3.0</plugin.version.maven-jar>
    <plugin.version.protobuf-maven-plugin>0.6.1</plugin.version.protobuf-maven-plugin>
    <plugin.version.replacer>1.5.3</plugin.version.replacer>
    <plugin.version.resources>3.3.1</plugin.version.resources>
    <plugin.version.revapi>0.15.0</plugin.version.revapi>
    <plugin.version.scala>4.8.1</plugin.version.scala>
    <plugin.version.shade>3.5.3</plugin.version.shade>
    <plugin.version.sonar>3.9.1.2184</plugin.version.sonar>
    <plugin.version.spotbugs>4.8.6.6</plugin.version.spotbugs>
    <plugin.version.surefire>3.2.5</plugin.version.surefire>
    <plugin.version.versions>2.16.2</plugin.version.versions>

    <!-- when updating this version, also change it in .idea/externalDependencies.xml -->
    <plugin.version.google-java-format>1.21.0</plugin.version.google-java-format>

    <!-- maven extensions -->
    <extension.version.os-maven-plugin>1.7.1</extension.version.os-maven-plugin>

    <!-- version against which backwards compatibility is checked -->
    <backwards.compat.version>8.5.15</backwards.compat.version>
    <ignored.changes.file>ignored-changes.json</ignored.changes.file>

    <!--
      you can use the following to disable some or all goals:
        - quickly will skip all non-essential goals, like checks, tests, and assembly
        - skipTests will skip all tests
        - skipITs will skip integration tests
        - skipUTs will skip unit tests
        - skipChecks will non-test checks, such as licensing, checkstyle, backwards compat, etc.
      -->
    <quickly>false</quickly>
    <skipTests>${quickly}</skipTests>
    <skipUTs>${skipTests}</skipUTs>
    <skipITs>${skipTests}</skipITs>
    <jacoco.skip>${skipUTs}</jacoco.skip>

    <!--
      you can use the following to disable specific check plugins. this can also be used to skip the
      formatting goals of these plugins. the approach taken is to use a single new property,
      skipChecks, which is the default value for pre-defined properties such as checkstyle.skip.
      that way, you can use skipChecks, but you can also still use checkstyle.skip if you only want
      to disable checkstyle
      -->
    <skipChecks>${quickly}</skipChecks>
    <checkstyle.skip>${skipChecks}</checkstyle.skip>
    <revapi.skip>${skipChecks}</revapi.skip>
    <license.skip>${skipChecks}</license.skip>
    <enforcer.skip>${skipChecks}</enforcer.skip>
    <mdep.analyze.skip>${skipChecks}</mdep.analyze.skip>
    <sort.skip>${skipChecks}</sort.skip>
    <spotless.apply.skip>${skipChecks}</spotless.apply.skip>
    <spotless.checks.skip>${skipChecks}</spotless.checks.skip>

    <!-- disable other non-essential goals -->
    <flatten.skip>${quickly}</flatten.skip>
    <assembly.skipAssembly>${quickly}</assembly.skipAssembly>
  </properties>

  <dependencyManagement>
    <dependencies>
      <!-- Internal Zeebe modules -->
      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-broker</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-protocol-test-util</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-stream-platform</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-logstreams</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-workflow-engine</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-msgpack-core</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-msgpack-value</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-protocol-impl</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-protocol-jackson</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-broker-client</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-transport</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-test-util</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-qa-util</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-util</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-auth</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-scheduler</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-db</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-build-tools</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-gateway-protocol</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-gateway</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-elasticsearch-exporter</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-opensearch-exporter</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-exporter-test</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-protocol-asserts</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-expression-language</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-feel-integration</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-snapshots</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-journal</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-dmn</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-atomix-cluster</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-atomix-utils</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-backup</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-backup-store-s3</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-backup-store-gcs</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-backup-store-azure</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-backup-store-common</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-backup-testkit</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-restore</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-gateway-rest</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-cluster-topology</artifactId>
        <version>${project.version}</version>
      </dependency>

      <!-- sibling projects -->

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-process-test-assertions</artifactId>
        <version>${version.zpt}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-process-test-filters</artifactId>
        <version>${version.zpt}</version>
      </dependency>

      <!-- Third party dependencies -->
      <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>${version.junit}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.fasterxml.jackson</groupId>
        <artifactId>jackson-bom</artifactId>
        <version>${version.jackson}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

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

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

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-actuator</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-actuator-autoconfigure</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-test</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-json</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>identity-spring-boot-starter</artifactId>
        <version>${version.identity}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>${version.spring-boot}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <version>${version.spring-boot}</version>
        <exclusions>
          <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-client-spring</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-broker</artifactId>
        <version>${project.version}</version>
        <classifier>tests</classifier>
        <type>test-jar</type>
      </dependency>

      <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-retry</artifactId>
        <version>${version.resilience4j}</version>
      </dependency>

      <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-core</artifactId>
        <version>${version.resilience4j}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-workflow-engine</artifactId>
        <version>${project.version}</version>
        <classifier>tests</classifier>
        <type>test-jar</type>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-logstreams</artifactId>
        <version>${project.version}</version>
        <classifier>tests</classifier>
        <type>test-jar</type>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>zeebe-scheduler</artifactId>
        <version>${project.version}</version>
        <classifier>tests</classifier>
        <type>test-jar</type>
      </dependency>

      <dependency>
        <groupId>org.agrona</groupId>
        <artifactId>agrona</artifactId>
        <version>${version.agrona}</version>
      </dependency>

      <dependency>
        <groupId>org.msgpack</groupId>
        <artifactId>msgpack-core</artifactId>
        <version>${version.msgpack}</version>
      </dependency>

      <dependency>
        <groupId>org.msgpack</groupId>
        <artifactId>jackson-dataformat-msgpack</artifactId>
        <version>${version.msgpack}</version>
      </dependency>

      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${version.junit4}</version>
      </dependency>

      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest</artifactId>
        <version>${version.hamcrest}</version>
      </dependency>

      <dependency>
        <groupId>com.tngtech.archunit</groupId>
        <artifactId>archunit</artifactId>
        <version>${version.archunit}</version>
      </dependency>

      <dependency>
        <groupId>com.tngtech.archunit</groupId>
        <artifactId>archunit-junit5-engine</artifactId>
        <version>${version.archunit}</version>
      </dependency>

      <dependency>
        <groupId>com.tngtech.archunit</groupId>
        <artifactId>archunit-junit5-api</artifactId>
        <version>${version.archunit}</version>
      </dependency>

      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-bom</artifactId>
        <version>${version.mockito}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${version.assertj}</version>
      </dependency>

      <dependency>
        <groupId>org.awaitility</groupId>
        <artifactId>awaitility</artifactId>
        <version>${version.awaitility}</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>${version.rest-assured}</version>
      </dependency>

      <dependency>
        <groupId>uk.co.real-logic</groupId>
        <artifactId>sbe-tool</artifactId>
        <version>${version.sbe}</version>
      </dependency>

      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${version.slf4j}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-bom</artifactId>
        <version>${version.log4j}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-bom</artifactId>
        <version>${version.feign}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${version.scala}</version>
      </dependency>

      <dependency>
        <groupId>org.camunda.bpm.model</groupId>
        <artifactId>camunda-xml-model</artifactId>
        <version>${version.camunda}</version>
      </dependency>

      <dependency>
        <groupId>org.rocksdb</groupId>
        <artifactId>rocksdbjni</artifactId>
        <version>${version.rocksdbjni}</version>
      </dependency>

      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-bom</artifactId>
        <version>${version.grpc}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-bom</artifactId>
        <version>${version.protobuf}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.google.api.grpc</groupId>
        <artifactId>proto-google-common-protos</artifactId>
        <version>${version.protobuf-common}</version>
      </dependency>

      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-bom</artifactId>
        <version>${version.netty}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>io.projectreactor.netty</groupId>
        <artifactId>reactor-netty-http</artifactId>
        <version>${version.reactor-netty}</version>
      </dependency>

      <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-bom</artifactId>
        <version>${version.micrometer}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-client</artifactId>
        <version>${version.elasticsearch}</version>
      </dependency>

      <dependency>
        <groupId>co.elastic.clients</groupId>
        <artifactId>elasticsearch-java</artifactId>
        <version>${version.elasticsearch}</version>
      </dependency>

      <dependency>
        <groupId>org.opensearch.client</groupId>
        <artifactId>opensearch-rest-client</artifactId>
        <version>${version.opensearch}</version>
      </dependency>

      <dependency>
        <groupId>org.opensearch.client</groupId>
        <artifactId>opensearch-java</artifactId>
        <version>${version.opensearch}</version>
      </dependency>

      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${version.guava}</version>
      </dependency>

      <dependency>
        <groupId>io.zeebe</groupId>
        <artifactId>zeebe-test-container</artifactId>
        <version>${version.zeebe-test-container}</version>
      </dependency>

      <dependency>
        <groupId>io.zeebe</groupId>
        <artifactId>zeebe-test-container-engine</artifactId>
        <version>${version.zeebe-test-container}</version>
      </dependency>

      <dependency>
        <groupId>com.google.errorprone</groupId>
        <artifactId>error_prone_annotations</artifactId>
        <version>${version.error-prone}</version>
        <scope>provided</scope>
      </dependency>

      <dependency>
        <groupId>org.objenesis</groupId>
        <artifactId>objenesis</artifactId>
        <version>${version.objenesis}</version>
      </dependency>

      <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>${version.snakeyaml}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${version.commons-lang}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math3</artifactId>
        <version>${version.commons-math}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>${version.commons-text}</version>
      </dependency>

      <dependency>
        <groupId>com.github.spotbugs</groupId>
        <artifactId>spotbugs-annotations</artifactId>
        <version>${version.spotbugs}</version>
        <scope>provided</scope>
      </dependency>

      <dependency>
        <groupId>net.jcip</groupId>
        <artifactId>jcip-annotations</artifactId>
        <version>${version.jcip}</version>
        <scope>provided</scope>
      </dependency>

      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>${version.httpcomponents}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore-nio</artifactId>
        <version>${version.httpcomponents}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpasyncclient</artifactId>
        <version>${version.httpasyncclient}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${version.httpclient}</version>
      </dependency>

      <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient</artifactId>
        <version>${version.prometheus}</version>
      </dependency>

      <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_httpserver</artifactId>
        <version>${version.prometheus}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.httpcomponents.client5</groupId>
        <artifactId>httpclient5</artifactId>
        <version>${version.httpclient5}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.httpcomponents.core5</groupId>
        <artifactId>httpcore5</artifactId>
        <version>${version.httpcore5}</version>
      </dependency>

      <!-- Interface based code generation -->
      <dependency>
        <groupId>org.immutables</groupId>
        <artifactId>value</artifactId>
        <version>${version.immutables}</version>
      </dependency>

      <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>${version.javax}</version>
      </dependency>

      <dependency>
        <groupId>org.wiremock</groupId>
        <artifactId>wiremock</artifactId>
        <version>${version.wiremock}</version>
      </dependency>

      <!-- Testcontainers & Docker for container based integration tests -->
      <dependency>
        <groupId>org.testcontainers</groupId>
        <artifactId>testcontainers-bom</artifactId>
        <version>${version.testcontainers}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.opensearch</groupId>
        <artifactId>opensearch-testcontainers</artifactId>
        <version>${version.opensearch.testcontainers}</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>com.github.dasniko</groupId>
        <artifactId>testcontainers-keycloak</artifactId>
        <version>${version.tc-keycloak}</version>
        <exclusions>
          <exclusion>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-junit4-mock</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>com.github.docker-java</groupId>
        <artifactId>docker-java-api</artifactId>
        <version>${version.docker-java-api}</version>
      </dependency>

      <dependency>
        <groupId>eu.rekawek.toxiproxy</groupId>
        <artifactId>toxiproxy-java</artifactId>
        <version>${version.toxiproxy}</version>
      </dependency>

      <dependency>
        <groupId>net.jqwik</groupId>
        <artifactId>jqwik</artifactId>
        <version>${version.jqwik}</version>
      </dependency>

      <dependency>
        <groupId>net.jqwik</groupId>
        <artifactId>jqwik-api</artifactId>
        <version>${version.jqwik}</version>
      </dependency>

      <dependency>
        <groupId>org.jmock</groupId>
        <artifactId>jmock</artifactId>
        <version>${version.jmock}</version>
        <exclusions>
          <exclusion>
            <groupId>org.jmock</groupId>
            <artifactId>jmock-testjar</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>${version.postgresql}</version>
      </dependency>

      <dependency>
        <groupId>com.netflix.concurrency-limits</groupId>
        <artifactId>concurrency-limits-core</artifactId>
        <version>${version.netflix.concurrency}</version>
      </dependency>

      <dependency>
        <groupId>org.camunda.feel</groupId>
        <artifactId>feel-engine</artifactId>
        <version>${version.feel-scala}</version>
      </dependency>

      <dependency>
        <groupId>org.camunda.bpm.extension.dmn.scala</groupId>
        <artifactId>dmn-engine</artifactId>
        <version>${version.dmn-scala}</version>
      </dependency>

      <dependency>
        <groupId>org.camunda.bpm.model</groupId>
        <artifactId>camunda-dmn-model</artifactId>
        <version>${version.camunda}</version>
      </dependency>

      <dependency>
        <groupId>net.jodah</groupId>
        <artifactId>concurrentunit</artifactId>
        <version>${version.concurrentunit}</version>
      </dependency>

      <dependency>
        <groupId>com.esotericsoftware</groupId>
        <artifactId>kryo</artifactId>
        <version>${version.kryo}</version>
      </dependency>

      <dependency>
        <groupId>org.jeasy</groupId>
        <artifactId>easy-random-core</artifactId>
        <version>${version.easy-random}</version>
      </dependency>

      <dependency>
        <groupId>net.jodah</groupId>
        <artifactId>failsafe</artifactId>
        <version>${version.failsafe}</version>
      </dependency>

      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy</artifactId>
        <version>${version.byte-buddy}</version>
      </dependency>

      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy-agent</artifactId>
        <version>${version.byte-buddy}</version>
      </dependency>

      <dependency>
        <groupId>io.github.classgraph</groupId>
        <artifactId>classgraph</artifactId>
        <version>${version.classgraph}</version>
      </dependency>

      <dependency>
        <groupId>com.esotericsoftware</groupId>
        <artifactId>minlog</artifactId>
        <version>${version.minlog}</version>
      </dependency>

      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk18on</artifactId>
        <version>${version.bouncycastle}</version>
      </dependency>

      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk18on</artifactId>
        <version>${version.bouncycastle}</version>
      </dependency>

      <dependency>
        <groupId>com.github.jnr</groupId>
        <artifactId>jnr-posix</artifactId>
        <version>${version.jnr-posix}</version>
      </dependency>

      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>libraries-bom</artifactId>
        <version>${version.google-sdk}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>${version.awssdk}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-sdk-bom</artifactId>
        <version>${version.azure-sdk}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>com.cronutils</groupId>
        <artifactId>cron-utils</artifactId>
        <version>${version.cron-utils}</version>
      </dependency>

      <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
        <version>${version.validation-api}</version>
      </dependency>

      <dependency>
        <groupId>org.openapitools</groupId>
        <artifactId>jackson-databind-nullable</artifactId>
        <version>${version.jackson-databind-nullable}</version>
      </dependency>

      <dependency>
        <groupId>com.google.code.findbugs</groupId>
        <artifactId>jsr305</artifactId>
        <version>${version.findbugs.jsr305}</version>
      </dependency>

      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${version.jackson-annotations}</version>
      </dependency>

      <dependency>
        <groupId>io.swagger.core.v3</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>${version.swagger-annotations}</version>
      </dependency>

      <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>${version.jakarta-annotation}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>${version.commons-compress}</version>
      </dependency>

      <dependency>
        <groupId>com.github.luben</groupId>
        <artifactId>zstd-jni</artifactId>
        <version>${version.zstd-jni}</version>
      </dependency>

      <dependency>
        <groupId>org.reactivestreams</groupId>
        <artifactId>reactive-streams</artifactId>
        <version>${version.reactive-streams}</version>
      </dependency>

      <dependency>
        <groupId>io.github.acm19</groupId>
        <artifactId>aws-request-signing-apache-interceptor</artifactId>
        <version>${version.aws-signing}</version>
      </dependency>

      <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>java-jwt</artifactId>
        <version>${version.java-jwt}</version>
      </dependency>

      <dependency>
        <groupId>org.jetbrains</groupId>
        <artifactId>annotations</artifactId>
        <version>${version.jetbrains-annotations}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>identity-sdk</artifactId>
        <version>${version.identity}</version>
      </dependency>

      <dependency>
        <groupId>io.camunda</groupId>
        <artifactId>identity-spring-boot-autoconfigure</artifactId>
        <version>${version.identity}</version>
      </dependency>

      <!--      JMH Tests   -->
      <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-core</artifactId>
        <version>${version.jmh}</version>
      </dependency>

      <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-generator-annprocess</artifactId>
        <version>${version.jmh}</version>
      </dependency>

      <!-- Dependencies present for convergence only -->
      <!-- between commons-compress and testcontainers-keycloak -->
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.15.1</version>
      </dependency>

      <!-- between log4j2 and commons-compress (from testcontainers) -->
      <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>${version.osgi}</version>
      </dependency>

      <!-- testcontainers and docker: see
        https://github.com/testcontainers/testcontainers-java/issues/3308 -->
      <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>${version.jna}</version>
      </dependency>

      <!-- between wiremock's own transitive dependencies -->
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>${version.servlet-api}</version>
      </dependency>

      <!-- between httpasyncclient and elasticsearch-rest-client -->
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>${version.commons-logging}</version>
      </dependency>

      <!-- between elasticsearch-rest-client and rest-assured -->
      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>${version.commons-codec}</version>
      </dependency>

      <!-- both hamcrest-core (deprecated in favor of hamcrest) and hamcrest are required for
           dependency convergence, mostly due to junit4's dependency on hamcrest-core -->
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-core</artifactId>
        <version>${version.hamcrest}</version>
      </dependency>

      <!-- grpc-core & protobuf-java-util require different versions of gson -->
      <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>${version.gson}</version>
      </dependency>

      <dependency>
        <groupId>org.checkerframework</groupId>
        <artifactId>checker-qual</artifactId>
        <version>${version.checker-qual}</version>
      </dependency>

      <!-- between Guava 32 and multiple Google dependencies, e.g. gRPC -->
      <dependency>
        <groupId>com.google.j2objc</groupId>
        <artifactId>j2objc-annotations</artifactId>
        <version>3.0.0</version>
      </dependency>

      <!-- between io.projectreactor.netty:reactor-netty-http:1.1.8 and org.springframework:spring-webflux:6.0.11 -->
      <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-core</artifactId>
        <version>3.6.11</version>
      </dependency>

      <!-- between com.github.dasniko:testcontainers-keycloak and its own dependencies -->
      <dependency>
        <groupId>jakarta.activation</groupId>
        <artifactId>jakarta.activation-api</artifactId>
        <version>${version.jakarta-activation}</version>
      </dependency>

      <!-- required between me.dinowernli:java-grpc-prometheus and com.google.guava:guava -->
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>failureaccess</artifactId>
        <version>1.0.2</version>
      </dependency>

      <!-- needed for tests in elasticsearch-exporter -->
      <dependency>
        <groupId>jakarta.json</groupId>
        <artifactId>jakarta.json-api</artifactId>
        <version>${version.jakarta.json-api}</version>
      </dependency>

      <!-- fixes CVE-2023-52428 -->
      <dependency>
        <groupId>com.nimbusds</groupId>
        <artifactId>nimbus-jose-jwt</artifactId>
        <version>9.37.3</version>
      </dependency>

      <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna-platform</artifactId>
        <version>${version.jna-platform}</version>
      </dependency>

      <!-- between com.nimbusds:oauth2-oidc-sdk and com.microsoft.azure:msal4j -->
      <dependency>
        <groupId>net.minidev</groupId>
        <artifactId>json-smart</artifactId>
        <version>${version.json-smart}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>io.camunda</groupId>
      <artifactId>zeebe-build-tools</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j2-impl</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>

    <pluginManagement>
      <plugins>
        <!-- MAVEN COMPILER -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${plugin.version.compiler}</version>
          <configuration>
            <parameters>true</parameters>
            <release>${version.java}</release>
            <compilerArgs>
              <!-- ensure we generate a class file for package-info.java files to avoid recompiling every time -->
              <arg>-Xpkginfo:always</arg>
            </compilerArgs>
            <useIncrementalCompilation>false</useIncrementalCompilation>
          </configuration>
        </plugin>

        <!-- compatibility checks/guard -->
        <plugin>
          <groupId>org.revapi</groupId>
          <artifactId>revapi-maven-plugin</artifactId>
          <version>${plugin.version.revapi}</version>
          <configuration>
            <!-- see the property's documentation as to why -->
            <checkDependencies>true</checkDependencies>
            <!-- expands maven properties in the configuration files -->
            <expandProperties>true</expandProperties>
            <!-- allows us to pre-defined ignored-changes, even when missing -->
            <failOnMissingConfigurationFiles>false</failOnMissingConfigurationFiles>
            <analysisConfigurationFiles>
              <!-- look for an optional relative configuration file -->
              <configurationFile>
                <path>revapi.json</path>
              </configurationFile>
              <!-- uses the default configuration file packaged in build-tools -->
              <configurationFile>
                <resource>revapi/revapi.json</resource>
              </configurationFile>
              <!-- will pick up a project relative ignored-changes file -->
              <configurationFile>
                <path>${ignored.changes.file}</path>
              </configurationFile>
            </analysisConfigurationFiles>
            <!--
              unfortunately we cannot use the meta version LATEST since we want to run this on
              different branches which need to compare to different versions
              -->
            <oldVersion>${backwards.compat.version}</oldVersion>
            <pipelineConfiguration>
              <transformBlocks>
                <!-- always execute the various differences plugins first which can exclude some
                     differences for the semantic version checker -->
                <block>
                  <item>revapi.differences</item>
                  <item>revapi.versions</item>
                </block>
              </transformBlocks>
            </pipelineConfiguration>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>org.revapi</groupId>
              <artifactId>revapi-java</artifactId>
              <version>${version.revapi}</version>
            </dependency>
            <dependency>
              <groupId>io.camunda</groupId>
              <artifactId>zeebe-build-tools</artifactId>
              <version>${project.version}</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>check</id>
              <goals>
                <goal>check</goal>
              </goals>
              <phase>verify</phase>
            </execution>
          </executions>
        </plugin>

        <!-- javadoc generation -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${plugin.version.javadoc}</version>
          <configuration>
            <source>${version.java}</source>
            <quiet>true</quiet>
            <additionalOptions>-Xdoclint:none</additionalOptions>
            <additionalDependencies>
              <additionalDependency>
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
                <version>1.3.2</version>
              </additionalDependency>
            </additionalDependencies>
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <!-- CHECKSTYLE -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>${plugin.version.checkstyle}</version>
          <configuration>
            <configLocation>check/.checkstyle.xml</configLocation>
            <includeTestSourceDirectory>true</includeTestSourceDirectory>
            <failOnViolation>true</failOnViolation>
            <sourceDirectories>
              <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
              <sourceDirectory>${project.build.testSourceDirectory}</sourceDirectory>
            </sourceDirectories>
          </configuration>
          <!-- dependency on build tool to reference the checkstyle cfg -->
          <dependencies>
            <dependency>
              <groupId>io.camunda</groupId>
              <artifactId>zeebe-build-tools</artifactId>
              <version>${project.version}</version>
            </dependency>
            <dependency>
              <groupId>com.puppycrawl.tools</groupId>
              <artifactId>checkstyle</artifactId>
              <version>${version.checkstyle}</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>validate-java</id>
              <goals>
                <goal>check</goal>
              </goals>
              <phase>validate</phase>
              <configuration />
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${plugin.version.surefire}</version>
          <configuration>
            <!-- by default, exclude performance and strace tests -->
            <excludedGroups>performance, strace</excludedGroups>
            <failIfNoTests>false</failIfNoTests>
            <trimStackTrace>false</trimStackTrace>
            <redirectTestOutputToFile>true</redirectTestOutputToFile>
            <properties>
              <property>
                <name>listener</name>
                <value>io.camunda.zeebe.ZeebeTestListener</value>
              </property>
            </properties>
            <reportNameSuffix>${env.SUREFIRE_REPORT_NAME_SUFFIX}</reportNameSuffix>
            <statelessTestsetReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
              <disable>false</disable>
              <version>3.0</version>
              <usePhrasedFileName>false</usePhrasedFileName>
              <usePhrasedTestSuiteClassName>true</usePhrasedTestSuiteClassName>
              <usePhrasedTestCaseClassName>true</usePhrasedTestCaseClassName>
              <usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
            </statelessTestsetReporter>
            <consoleOutputReporter implementation="io.camunda.zeebe.ZeebeConsoleOutputReporter" />
            <skip>${skipUTs}</skip>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>io.camunda</groupId>
              <artifactId>zeebe-build-tools</artifactId>
              <version>${project.version}</version>
            </dependency>
          </dependencies>
        </plugin>

        <!-- Integration tests -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>${plugin.version.failsafe}</version>
          <configuration>
            <failIfNoTests>false</failIfNoTests>
            <trimStackTrace>false</trimStackTrace>
            <redirectTestOutputToFile>true</redirectTestOutputToFile>
            <properties>
              <property>
                <name>listener</name>
                <value>io.camunda.zeebe.ZeebeTestListener</value>
              </property>
            </properties>
            <reportNameSuffix>${env.SUREFIRE_REPORT_NAME_SUFFIX}</reportNameSuffix>
            <!--
              ensure junit5 display names are properly reported; see the documentation for more
              https://maven.apache.org/surefire/maven-failsafe-plugin/examples/junit-platform.html
              -->
            <statelessTestsetReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
              <disable>false</disable>
              <version>3.0</version>
              <usePhrasedFileName>false</usePhrasedFileName>
              <usePhrasedTestSuiteClassName>true</usePhrasedTestSuiteClassName>
              <usePhrasedTestCaseClassName>true</usePhrasedTestCaseClassName>
              <usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
            </statelessTestsetReporter>
            <consoleOutputReporter implementation="io.camunda.zeebe.ZeebeConsoleOutputReporter" />
            <skip>${skipITs}</skip>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>io.camunda</groupId>
              <artifactId>zeebe-build-tools</artifactId>
              <version>${project.version}</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <!-- Build Helper Plugin -->
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>${plugin.version.build-helper}</version>
        </plugin>

        <!-- Shade Plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>${plugin.version.shade}</version>
        </plugin>

        <!-- App Assembler Plugin -->
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>appassembler-maven-plugin</artifactId>
          <version>${plugin.version.appassembler}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>${plugin.version.assembly}</version>
        </plugin>

        <!-- Exec Plugin -->
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>${plugin.version.exec}</version>
          <dependencies>
            <dependency>
              <groupId>uk.co.real-logic</groupId>
              <artifactId>sbe-tool</artifactId>
              <version>${version.sbe}</version>
            </dependency>
          </dependencies>
          <executions>
            <!--
              Use exec:exec to generate SBE instead of exec:java, as exec:java does not fork the
              process, and the SBE tool is not thread safe, i.e. could not be used with a parallel
              multi-module maven build.
              See: https://github.com/camunda/camunda/issues/16029
            -->
            <execution>
              <id>generate-sbe</id>
              <goals>
                <goal>exec</goal>
              </goals>
              <!-- not bound by default since it would execute in places where we don't want SBE generation -->
              <phase>none</phase>
              <configuration combine.children="override">
                <!--
                  we have to use the goal exec with the java executable as otherwise the process
                  will not fork, and this can cause thread safety issues in a parallel multi-module
                  build
                -->
                <executable>java</executable>
                <includePluginDependencies>true</includePluginDependencies>
                <arguments combine.children="append">
                  <argument>-Dsbe.output.dir=${project.build.directory}/generated-sources/sbe</argument>
                  <argument>-Dsbe.java.generate.interfaces=true</argument>
                  <argument>-Dsbe.decode.unknown.enum.values=true</argument>
                  <argument>-Dsbe.xinclude.aware=true</argument>
                  <argument>-classpath</argument>
                  <!-- automatically creates the classpath using all project dependencies,
                     also adding the project build directory -->
                  <classpath />
                  <argument>uk.co.real_logic.sbe.SbeTool</argument>
                </arguments>
                <workingDirectory>${project.build.directory}/generated-sources</workingDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <!-- Resources Plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>${plugin.version.resources}</version>
        </plugin>

        <!-- Scala Plugin -->
        <plugin>
          <groupId>net.alchim31.maven</groupId>
          <artifactId>scala-maven-plugin</artifactId>
          <version>${plugin.version.scala}</version>
          <configuration>
            <scalaVersion>${version.scala}</scalaVersion>
            <source>${version.java}</source>
            <target>${version.java}</target>
          </configuration>
          <executions>
            <execution>
              <id>scala-compile-first</id>
              <goals>
                <goal>add-source</goal>
                <goal>compile</goal>
              </goals>
              <phase>process-resources</phase>
            </execution>
            <execution>
              <id>scala-test-compile</id>
              <goals>
                <goal>testCompile</goal>
              </goals>
              <phase>process-test-resources</phase>
            </execution>
          </executions>
        </plugin>

        <!--This plugin's configuration is used to store Eclipse m2e settings
          only. It has no influence on the Maven build itself. -->
        <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.3.2,)</versionRange>
                    <goals>
                      <goal>java</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>

        <!-- Ant run plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>${plugin.version.antrun}</version>
        </plugin>

        <!-- Versions plugin to update versions in pom files -->
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>${plugin.version.versions}</version>
        </plugin>

        <!-- protobuf generation -->
        <plugin>
          <groupId>org.xolstice.maven.plugins</groupId>
          <artifactId>protobuf-maven-plugin</artifactId>
          <version>${plugin.version.protobuf-maven-plugin}</version>
          <configuration>
            <checkStaleness>true</checkStaleness>
            <protocArtifact>com.google.protobuf:protoc:${version.protobuf}:exe:${os.detected.classifier}</protocArtifact>
            <pluginId>grpc-java</pluginId>
            <pluginArtifact>io.grpc:protoc-gen-grpc-java:${version.grpc}:exe:${os.detected.classifier}</pluginArtifact>
          </configuration>
          <executions>
            <execution>
              <goals>
                <goal>compile</goal>
                <goal>compile-custom</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>com.google.code.maven-replacer-plugin</groupId>
          <artifactId>replacer</artifactId>
          <version>${plugin.version.replacer}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>${plugin.version.enforcer}</version>
          <executions>
            <execution>
              <id>enforce-dependency-convergence</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <rules>
                  <dependencyConvergence>
                    <excludes>
                      <!-- To be removed once these conflicts are resolved by identity. -->
                      <!-- See https://github.com/camunda-cloud/identity/issues/1696 -->
                      <exclude>com.auth0:java-jwt</exclude>
                      <exclude>org.jetbrains.kotlin:kotlin-stdlib-common</exclude>
                      <exclude>org.jetbrains.kotlin:kotlin-stdlib-jdk8</exclude>
                      <exclude>com.squareup.okio:okio</exclude>
                      <!-- azure-sdk makes some calls at runtime to msal4j which may fail if we
                           pin it to the wrong version, but azure-sdk also, transitively, causes
                           dependency convergence issues -->
                      <exclude>com.microsoft.azure:msal4j</exclude>
                    </excludes>
                  </dependencyConvergence>
                </rules>
              </configuration>
            </execution>
            <execution>
              <id>enforce-unique-dependencies</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <rules>
                  <banDuplicatePomDependencyVersions />
                </rules>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>${plugin.version.dependency}</version>
          <!-- To run with Java 11 - https://issues.apache.org/jira/browse/MDEP-613-->
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.shared</groupId>
              <artifactId>maven-dependency-analyzer</artifactId>
              <version>${plugin.version.dependency-analyzer}</version>
            </dependency>
          </dependencies>

          <executions>
            <execution>
              <id>analyze-dependencies</id>
              <goals>
                <goal>analyze-only</goal>
              </goals>
              <!-- The analyze-only goal assumes that the test-compile phase has been executed -->
              <phase>verify</phase>
              <configuration>
                <failOnWarning>true</failOnWarning>
                <outputXML>true</outputXML>
                <!-- dependencies not directly used in all projects during tests -->
                <ignoredUnusedDeclaredDependencies combine.children="append">
                  <dep>org.apache.logging.log4j:log4j-slf4j2-impl</dep>
                  <dep>org.apache.logging.log4j:log4j-core</dep>
                  <dep>io.camunda:zeebe-build-tools</dep>
                  <dep>io.camunda:zeebe-gateway-protocol</dep>
                  <dep>org.ow2.asm:asm</dep>
                  <dep>org.bouncycastle:bcpkix-jdk18on</dep>
                  <dep>org.bouncycastle:bcprov-jdk18on</dep>
                  <dep>org.junit.jupiter:junit-jupiter-engine</dep>
                  <dep>org.junit.vintage:junit-vintage-engine</dep>
                  <dep>com.tngtech.archunit:archunit-junit5-engine</dep>
                  <dep>org.openjdk.jmh:jmh-generator-annprocess</dep>
                  <dep>org.postgresql:postgresql</dep>
                </ignoredUnusedDeclaredDependencies>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>${plugin.version.maven-jar}</version>
          <configuration>
            <useDefaultManifestFile>false</useDefaultManifestFile>
          </configuration>
        </plugin>

        <!-- JaCoCo Plugin -->
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>${plugin.version.jacoco}</version>
          <executions>
            <execution>
              <id>coverage-initialize</id>
              <goals>
                <goal>prepare-agent</goal>
              </goals>
            </execution>
            <execution>
              <id>coverage-report</id>
              <goals>
                <goal>report</goal>
              </goals>
              <phase>post-integration-test</phase>
            </execution>
            <!-- Threshold -->
          </executions>
        </plugin>

        <!-- extracts flaky test results into separate test cases; meant to be use in CI -->
        <plugin>
          <groupId>io.zeebe</groupId>
          <artifactId>flaky-test-extractor-maven-plugin</artifactId>
          <version>${plugin.version.flaky-tests}</version>
        </plugin>

        <plugin>
          <groupId>org.openapitools</groupId>
          <artifactId>openapi-generator-maven-plugin</artifactId>
          <version>7.4.0</version>
          <configuration>
            <!-- https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator-maven-plugin -->
            <!-- https://github.com/OpenAPITools/openapi-generator/blob/master/docs/generators/spring.md -->
            <generatorName>spring</generatorName>
            <modelPackage>io.camunda.zeebe.shared.management.openapi.models</modelPackage>
            <!-- Do no generate full server stub. Generate only classes for request and response types.  -->
            <generateApis>false</generateApis>
            <generateApiTests>false</generateApiTests>
            <generateSupportingFiles>false</generateSupportingFiles>
            <generateModels>true</generateModels>
            <configOptions>
              <sourceFolder>src/main</sourceFolder>
              <additionalModelTypeAnnotations>@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)</additionalModelTypeAnnotations>
              <useSpringBoot3>true</useSpringBoot3>
            </configOptions>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <version>${version.spring-boot}</version>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>com.mycila</groupId>
        <artifactId>license-maven-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>flatten-maven-plugin</artifactId>
        <configuration>
          <flattenMode>ossrh</flattenMode>
        </configuration>
      </plugin>

      <!-- Google code format plugin -->
      <plugin>
        <groupId>com.diffplug.spotless</groupId>
        <artifactId>spotless-maven-plugin</artifactId>
        <configuration>
          <java>
            <googleJavaFormat>
              <version>${plugin.version.google-java-format}</version>
              <style>GOOGLE</style>
            </googleJavaFormat>
          </java>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>com.google.googlejavaformat</groupId>
            <artifactId>google-java-format</artifactId>
            <version>${plugin.version.google-java-format}</version>
          </dependency>
        </dependencies>
      </plugin>

    </plugins>
    <extensions>
      <extension>
        <groupId>kr.motd.maven</groupId>
        <artifactId>os-maven-plugin</artifactId>
        <version>${extension.version.os-maven-plugin}</version>
      </extension>
    </extensions>
  </build>

  <profiles>
    <profile>
      <id>skip-random-tests</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <excludes>
                <exclude>**/*RandomizedPropertyTest.java</exclude>
                <exclude>**/*RandomizedRaftTest.java</exclude>
                <!-- Re-add the default exclude for inner classes, see https://github.com/camunda/zeebe/issues/8637 -->
                <exclude>**/*$*.java</exclude>
              </excludes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <!-- Dedicated profile to run ONLY random tests. The include config overwrites the default pattern-->
      <id>include-random-tests</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>**/*RandomizedPropertyTest.java</include>
                <include>**/*RandomizedRaftTest.java</include>
              </includes>
              <systemPropertyVariables>
                <processCount>10</processCount>
                <executionCount>100</executionCount>
                <replayExecutionCount>5</replayExecutionCount>
              </systemPropertyVariables>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <!-- Dedicated profile to run ONLY tests requiring strace. -->
      <id>include-strace-tests</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <groups>strace</groups>
              <!-- Reset <excludedGroups> as it take precedence over <groups> -->
              <excludedGroups combine.self="override" />
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <!-- Dedicated profile to run ONLY performance tests. The include config overwrites the default pattern-->
      <id>include-performance-tests</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <groups>performance</groups>
              <!-- Reset <excludedGroups> as it take precedence over <groups> -->
              <excludedGroups combine.self="override" />
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>parallel-tests</id>
      <properties>
        <forkCount>0.5C</forkCount>
        <junitThreadCount>2</junitThreadCount>
        <junitConfigurationParameters>
          <!-- allow junit5 parallel execution, configured on the number of cores
               note that this does not make tests parallel, this is still controlled in the tests
               themselves via the @Execution annotation. furthermore, child modules can define
               their own parallel configuration -->
          junit.jupiter.execution.parallel.enabled = true
          junit.jupiter.execution.parallel.config.strategy = fixed
          junit.jupiter.execution.parallel.config.fixed.parallelism = ${junitThreadCount}
        </junitConfigurationParameters>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <forkCount>${forkCount}</forkCount>
              <reuseForks>true</reuseForks>
              <systemPropertyVariables>
                <!-- use two dollar signs to prevent maven properties resolution, surefire will resolve
                the property later. If only ${surefire.forkNumber} is used maven will fail to resolve it
                and don't set the system property -->
                <testForkNumber>$${surefire.forkNumber}</testForkNumber>
              </systemPropertyVariables>
              <properties>
                <configurationParameters>${junitConfigurationParameters}</configurationParameters>
              </properties>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <configuration>
              <forkCount>${forkCount}</forkCount>
              <reuseForks>true</reuseForks>
              <systemPropertyVariables>
                <!-- use two dollar signs to prevent maven properties resolution, surefire will resolve
                the property later. If only ${surefire.forkNumber} is used maven will fail to resolve it
                and don't set the system property -->
                <testForkNumber>$${surefire.forkNumber}</testForkNumber>
              </systemPropertyVariables>
              <properties>
                <configurationParameters>${junitConfigurationParameters}</configurationParameters>
              </properties>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>spotbugs</id>
      <build>
        <plugins>
          <plugin>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-maven-plugin</artifactId>
            <version>${plugin.version.spotbugs}</version>
            <configuration>
              <effort>Max</effort>
              <threshold>Low</threshold>
              <xmlOutput>true</xmlOutput>
              <includeFilterFile>${spotbugs.include}</includeFilterFile>
              <excludeFilterFile>${spotbugs.exclude}</excludeFilterFile>
            </configuration>

            <!-- dependency on build tool to reference the spotbugs filter-->
            <dependencies>
              <dependency>
                <groupId>io.camunda</groupId>
                <artifactId>zeebe-build-tools</artifactId>
                <version>${project.version}</version>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>

      </build>
    </profile>

    <!--
      This profile is used to add an explicit dependency to surefire-junit. To fix the race condition
      of https://github.com/zeebe-io/zeebe/issues/2379 we download all dependencies at the beginning
      with mvn dependency:go-offline and then run the tests in offline mode. But the plugin misses
      to download the surefire-junit dependency, therefore define an explicit dependency while downloading.

      NOTE: make sure to specify the scope as test for all dependencies, otherwise they will get
            added to the distribution!

      Usage: mvn install -Pprepare-offline
    -->
    <profile>
      <id>prepare-offline</id>
      <dependencies>
        <dependency>
          <groupId>org.apache.maven.surefire</groupId>
          <artifactId>surefire-junit4</artifactId>
          <version>${plugin.version.surefire}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.maven.surefire</groupId>
          <artifactId>surefire-junit47</artifactId>
          <version>${plugin.version.surefire}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.maven.surefire</groupId>
          <artifactId>surefire-junit-platform</artifactId>
          <version>${plugin.version.surefire}</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <configuration>
              <ignoredUnusedDeclaredDependencies combine.children="append">
                <dep>org.apache.maven.surefire:surefire-junit4</dep>
                <dep>org.apache.maven.surefire:surefire-junit47</dep>
                <dep>org.apache.maven.surefire:surefire-junit-platform</dep>
                <dep>org.codehaus.plexus:plexus-utils</dep>
              </ignoredUnusedDeclaredDependencies>
            </configuration>
            <executions>
              <execution>
                <id>go-offline</id>
                <goals>
                  <goal>resolve-plugins</goal>
                  <goal>go-offline</goal>
                </goals>
                <phase>initialize</phase>
                <configuration>
                  <silent>true</silent>
                </configuration>
              </execution>
              <execution>
                <id>analyze-dependencies</id>
                <goals>
                  <goal>analyze-only</goal>
                </goals>
                <phase>verify</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!--
      profile to enable flaky test analysis/extraction; running this module will extract flaky runs
      from your failed test cases as their own test case, such that the failed results can be viewed
      in Jenkins
      -->
    <profile>
      <id>extract-flaky-tests</id>

      <properties>
        <flaky.test.reportDir>surefire-reports</flaky.test.reportDir>
      </properties>

      <build>
        <plugins>
          <plugin>
            <groupId>io.zeebe</groupId>
            <artifactId>flaky-test-extractor-maven-plugin</artifactId>
            <configuration>
              <reportDir>${project.build.directory}/${flaky.test.reportDir}</reportDir>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>extract-flaky-tests</goal>
                </goals>
                <phase>post-integration-test</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
