<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.neo4j</groupId>
  <artifactId>parent</artifactId>
  <version>5.21.2</version>
  <packaging>pom</packaging>
  <name>Neo4j - Parent</name>
  <description>Neo4j Graph Database</description>
  <inceptionYear>2002</inceptionYear>
  <url>https://neo4j.com/</url>

  <organization>
    <name>The Neo4j Graph Database Project</name>
    <url>https://neo4j.com/</url>
  </organization>

  <scm>
    <connection>scm:git:git://github.com/neo4j/neo4j.git</connection>
    <developerConnection>scm:git:git@github.com:neo4j/neo4j.git</developerConnection>
    <url>https://github.com/neo4j/neo4j</url>
  </scm>

  <licenses>
    <license>
      <name>GPL-3.0-or-later</name>
      <url>https://www.gnu.org/licenses/gpl-3.0-standalone.html</url>
      <distribution>repo</distribution>
      <comments>
        The software ("Software") developed and owned by Neo4j Sweden AB (referred to in this notice as "Neo4j") is
        licensed under the GNU GENERAL PUBLIC LICENSE Version 3 to all third
        parties and that license is included below.

        However, if you have executed an End User Software License and Services
        Agreement or an OEM Software License and Support Services Agreement, or
        another commercial license agreement with Neo4j or one of its
        affiliates (each, a "Commercial Agreement"), the terms of the license in
        such Commercial Agreement will supersede the GNU GENERAL PUBLIC LICENSE
        Version 3 and you may use the Software solely pursuant to the terms of
        the relevant Commercial Agreement.
      </comments>
    </license>
  </licenses>

  <developers>
    <developer>
      <id>neo4j</id>
      <name>The Neo4j Team</name>
      <url>https://neo4j.com/</url>
      <organization>Neo4j Inc.</organization>
      <organizationUrl>https://neo4j.com/</organizationUrl>
    </developer>
  </developers>

  <mailingLists>
    <mailingList>
      <name>Neo4j Community Discussions</name>
      <subscribe>https://groups.google.com/forum/#!forum/neo4j</subscribe>
    </mailingList>
  </mailingLists>

  <issueManagement>
    <system>GitHub</system>
    <url>https://github.com/neo4j/neo4j/issues</url>
  </issueManagement>

  <distributionManagement>
    <repository>
      <id>sonatype-nexus-staging</id>
      <name>Nexus Release Repository</name>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <generate-config-docs-phase>prepare-package</generate-config-docs-phase>
    <jdk.custom.options>
      --add-opens=java.base/java.nio=ALL-UNNAMED
      --add-opens=java.base/java.io=ALL-UNNAMED
      --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
      --add-modules=jdk.incubator.vector
    </jdk.custom.options>
    <test.runner.jvm/>
    <test.runner.jvm.settings.additional/>
    <test.runner.jvm.settings.db.format/>
    <test.runner.jvm.settings>
      -Xmx${test.vm.heap.size}
      -XX:+UseG1GC
      -XX:-OmitStackTraceInFastThrow
      -XX:+HeapDumpOnOutOfMemoryError
      -XX:+ExitOnOutOfMemoryError
      -Djdk.nio.maxCachedBufferSize=1024
      -Dlog4j2.disable.jmx=true
      -Dio.netty.tryReflectionSetAccessible=true
      "-XX:HeapDumpPath=target/"
      -Dorg.neo4j.io.pagecache.impl.muninn.MuninnWritePageCursor.CHECK_WRITE_LOCKS=true
      -Dorg.neo4j.io.pagecache.impl.muninn.MuninnPagedFile.TRACE_FILE_CLOSE=false
      -Dorg.neo4j.io.pagecache.impl.muninn.MuninnPagedFile.TIME_LIMIT_ON_FILE_UNMAP_SECONDS=300
      -Dorg.neo4j.io.pagecache.tracing.cursor.DefaultPageCursorTracer.CHECK_REPORTED_COUNTERS=${cursor.counters.check}
      -Dorg.neo4j.internal.unsafe.UnsafeUtil.DIRTY_MEMORY=true
      -Dorg.neo4j.internal.unsafe.UnsafeUtil.CHECK_NATIVE_ACCESS=true
      -Dorg.neo4j.kernel.impl.store.cursor.AbstractCachedStoreCursors.CHECK_READ_CURSORS=true
      -Dorg.neo4j.kernel.impl.api.parallel.ParallelAccessCheck.CHECK_PARALLEL_ACCESS=true
      -Dorg.neo4j.io.pagecache.impl.muninn.usePreciseCursorErrorStackTraces=true
      -Dorg.neo4j.codegen.bytecode.ByteCodeExpressionVisitor.checkByteCode=false
      -Dorg.neo4j.internal.batchimport.Configuration.DEFAULT_BATCH_SIZE=10
      -Dorg.neo4j.kernel.impl.scheduler.ThreadPool.shutdownTimeout=2
      -Dorg.neo4j.server.HeapDumpDiagnostics.ENABLED=false
      -Dorg.neo4j.service.Services.throwServiceLoaderExceptions=true
      -Djunit.jupiter.extensions.autodetection.enabled=true
      -Djunit.jupiter.execution.parallel.enabled=${parallel.tests}
      -Djunit.jupiter.execution.timeout.default=${default.jupiter.test.timeout}
      -Djunit.jupiter.execution.parallel.mode.classes.default=${default.jupiter.test.mode}
      -XX:+UnlockExperimentalVMOptions
      -XX:+TrustFinalNonStaticFields
      -XX:FlightRecorderOptions=stackdepth=256
      -XX:+UnlockDiagnosticVMOptions
      -XX:+DebugNonSafepoints
      -XX:MaxMetaspaceSize=550m
      -XX:+EnableDynamicAgentLoading
      ${jdk.custom.options}
      ${test.runner.jvm.settings.db.format}
      ${test.runner.jvm.settings.additional}
    </test.runner.jvm.settings>
    <default.jupiter.test.timeout>20m</default.jupiter.test.timeout>
    <default.jupiter.test.mode>same_thread</default.jupiter.test.mode>
    <excludedTestGroups/>
    <test.vm.heap.size>2G</test.vm.heap.size>
    <forkCounts>1</forkCounts>
    <parallel.tests>false</parallel.tests>
    <maven.build.timestamp.format>yyMMddHHmmssSSS</maven.build.timestamp.format>
    <cursor.counters.check>true</cursor.counters.check>
    <skip-scalastyle>false</skip-scalastyle>

    <license.id>neo4j_gpl_v3</license.id>
    <license-text.header>license/neo4j_gpl_v3/header.txt</license-text.header>
    <licensing.prepend.text>license/neo4j_gpl_v3/notice.txt</licensing.prepend.text>

    <jamm.version>0.4.0</jamm.version>
    <lucene.version>9.10.0</lucene.version>
    <bouncycastle.version>1.78.1</bouncycastle.version>
    <jetty.version>10.0.20</jetty.version>
    <scala-maven-plugin.version>4.9.0</scala-maven-plugin.version>
    <scala.version>2.13.11</scala.version>
    <scala.binary.version>2.13</scala.binary.version>
    <scala.plugin.recompileMode>all</scala.plugin.recompileMode>
    <scala.test.version>3.2.13</scala.test.version>
    <asm.version>9.7</asm.version>
    <metrics.version>4.2.25</metrics.version>
    <scala.target.vm>17</scala.target.vm>
    <jersey.version>2.34</jersey.version>
    <junit.version>5.10.2</junit.version>
    <junit.platform.version>1.10.2</junit.platform.version>
    <mockito.version>5.11.0</mockito.version>
    <opencypher.version>1.0.0-M23</opencypher.version>
    <caffeine.version>3.1.8</caffeine.version>
    <required.maven.version>3.8.2</required.maven.version>
    <jackson.version>2.17.0</jackson.version>
    <jackson-databind.version>2.17.0</jackson-databind.version>
    <amazon-sdk.version>1.12.714</amazon-sdk.version>
    <awssdk.version>2.25.44</awssdk.version>
    <awssdk-crt.version>0.29.18</awssdk-crt.version>
    <guava.version>33.2.0-jre</guava.version>
    <awaitility.version>4.2.1</awaitility.version>
    <log4j.version>2.20.0</log4j.version>
    <slf4j.version>2.0.9</slf4j.version>
    <neo4j-java-driver.version>5.21.0</neo4j-java-driver.version>
    <eclipse-collections.version>11.1.0</eclipse-collections.version>
    <picocli.version>4.7.5</picocli.version>
    <jakarta.activation-api.version>1.2.2</jakarta.activation-api.version>
    <jakarta.ws.rs-api.version>2.1.6</jakarta.ws.rs-api.version>
    <antlr.version>4.13.1</antlr.version>
    <error_prone_annotations.version>2.27.1</error_prone_annotations.version>
    <teavm.version>0.10.0</teavm.version>
    <javapoet.version>1.13.0</javapoet.version>
    <google.cloud.version>26.38.0</google.cloud.version>
    <grpc.version>1.63.0</grpc.version>
    <testcontainers.version>1.19.7</testcontainers.version>
    <build-resources.version>2024-05.1</build-resources.version>
  </properties>

  <modules>
    <module>annotations</module>
    <module>community</module>
    <module>packaging</module>
  </modules>

  <build>
    <!-- Define project structure -->
    <resources>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
      </resource>
      <resource>
        <directory>${basedir}/src/main/resources/META-INF/</directory>
        <targetPath>META-INF</targetPath>
      </resource>
      <resource>
        <directory>${basedir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>COPYRIGHT.txt</include>
          <include>NOTICE.txt</include>
          <include>LICENSE.txt</include>
          <include>LICENSES.txt</include>
          <include>README*</include>
          <include>CHANGES.txt</include>
        </includes>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>${basedir}/src/test/resources</directory>
      </testResource>
      <testResource>
        <directory>${basedir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>COPYRIGHT.txt</include>
          <include>NOTICE.txt</include>
          <include>LICENSE.txt</include>
          <include>LICENSES.txt</include>
          <include>README*</include>
          <include>CHANGES.txt</include>
        </includes>
      </testResource>
    </testResources>

    <!-- Plugin definitions -->
    <pluginManagement>
      <plugins>

        <!-- Here we define our public API -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.1.1</version>
          <executions>
            <execution>
              <id>generate-javadocs</id>
              <goals>
                <goal>javadoc-no-fork</goal>
              </goals>
              <phase>prepare-package</phase>
            </execution>
          </executions>
          <configuration>
            <additionalJOptions>
              <additionalJOption>-J--add-exports=jdk.javadoc/jdk.javadoc.internal.tool=ALL-UNNAMED</additionalJOption>
              <additionalJOption>--allow-script-in-comments</additionalJOption>
            </additionalJOptions>
            <doclet>org.neo4j.annotations.api.PublicApiDoclet</doclet>
            <docletArtifact>
              <groupId>org.neo4j</groupId>
              <artifactId>annotations</artifactId>
              <version>${project.version}</version>
            </docletArtifact>

            <header>Neo4j</header>
            <doctitle>Neo4j ${project.version} API</doctitle>
            <windowtitle>Neo4j ${project.version} API</windowtitle>
            <show>public</show>

            <quiet>true</quiet>
            <reportOutputDirectory>${project.build.directory}/apidocs</reportOutputDirectory>
            <links>
              <link>https://docs.oracle.com/en/java/javase/${maven.compiler.source}/docs/api</link>
            </links>

            <!-- Defines grouping for overview -->
            <groups>
              <group>
                <title>Graph database</title>
                <packages>org.neo4j.graphdb:org.neo4j.dbms.api</packages>
              </group>
              <group>
                <title>Graph algorithms</title>
                <packages>org.neo4j.graphalgo:org.neo4j.graphalgo.*</packages>
              </group>
              <group>
                <title>Logging</title>
                <packages>org.neo4j.logging:org.neo4j.logging.*</packages>
              </group>
              <group>
                <title>Procedures</title>
                <packages>org.neo4j.procedure</packages>
              </group>
              <group>
                <title>Server Plugin API</title>
                <packages>org.neo4j.server:org.neo4j.server.*</packages>
              </group>
              <group>
                <title>Test Harness</title>
                <packages>org.neo4j.harness.junit*</packages>
              </group>
            </groups>

            <!-- Include the following packages... (yes, has to be one line) -->
            <subpackages>
              org.neo4j.graphalgo:org.neo4j.graphdb:org.neo4j.dbms.api:org.neo4j.server.helpers:org.neo4j.server.rest.repr:org.neo4j.server.rest.web:org.neo4j.logging:org.neo4j.procedure:org.neo4j.harness.junit:org.neo4j.configuration
            </subpackages>
            <!-- ...unless the package contains -->
            <excludePackageNames>
              *.impl.*:*.internal.*
            </excludePackageNames>
            <bottom>
              <![CDATA[
                <script>
                  if (typeof useModuleDirectories !== 'undefined') {
                    useModuleDirectories = false;
                  }
                </script>
              ]]>
            </bottom>
          </configuration>
        </plugin>

        <!-- Testing setup -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.2.5</version>
          <configuration>
            <statelessTestsetReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
              <disable>false</disable>
              <version>3.0</version>
              <usePhrasedFileName>false</usePhrasedFileName>
              <usePhrasedTestSuiteClassName>false</usePhrasedTestSuiteClassName>
              <usePhrasedTestCaseClassName>true</usePhrasedTestCaseClassName>
              <usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
            </statelessTestsetReporter>
            <forkCount>${forkCounts}</forkCount>
            <trimStackTrace>false</trimStackTrace>
            <reuseForks>true</reuseForks>
            <argLine>${test.runner.jvm.settings}</argLine>
            <runOrder>random</runOrder>
            <forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>
            <systemPropertyVariables>
              <dbms.pagecache.memory.default.override>8m</dbms.pagecache.memory.default.override>
              <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
              <jdk.custom.options>${jdk.custom.options}</jdk.custom.options>
            </systemPropertyVariables>
            <jvm>${test.runner.jvm}</jvm>
            <excludes>
              <exclude>**/*$*.class</exclude>
              <exclude>**/*IntegrationTest.class</exclude>
            </excludes>
            <excludedGroups>${excludedTestGroups}</excludedGroups>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>3.2.5</version>
          <configuration>
            <statelessTestsetReporter
                    implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
              <disable>false</disable>
              <usePhrasedFileName>false</usePhrasedFileName>
              <usePhrasedTestSuiteClassName>false</usePhrasedTestSuiteClassName>
              <usePhrasedTestCaseClassName>true</usePhrasedTestCaseClassName>
              <usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
            </statelessTestsetReporter>
            <argLine>${test.runner.jvm.settings}</argLine>
            <forkCount>${forkCounts}</forkCount>
            <trimStackTrace>false</trimStackTrace>
            <reuseForks>true</reuseForks>
            <runOrder>random</runOrder>
            <forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>
            <includes>
              <include>**/IT*.class</include>
              <include>**/*IT.class</include>
              <include>**/*ITCase.class</include>
              <include>**/*IntegrationTest.class</include>
            </includes>
            <excludedGroups>${excludedTestGroups}</excludedGroups>
            <systemPropertyVariables>
              <dbms.pagecache.memory.default.override>8m</dbms.pagecache.memory.default.override>
              <port.authority.directory>${user.dir}/target/port-authority-${maven.build.timestamp}</port.authority.directory>
              <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
              <jdk.custom.options>${jdk.custom.options}</jdk.custom.options>
            </systemPropertyVariables>
            <jvm>${test.runner.jvm}</jvm>
          </configuration>
          <executions>
            <execution>
              <id>integration-test</id>
              <goals>
                <goal>integration-test</goal>
              </goals>
            </execution>
            <execution>
              <id>verify</id>
              <goals>
                <goal>verify</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <!-- Jar file packaging settings -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.4.1</version>
          <executions>
            <!-- Augment default jar with url -->
            <execution>
              <id>default-jar</id>
              <configuration>
                <archive>
                  <manifest>
                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                  </manifest>
                  <manifestEntries>
                    <Url>${project.organization.url}</Url>
                    <!--suppress UnresolvedMavenProperty -->
                    <Automatic-Module-Name>${moduleName}</Automatic-Module-Name>
                  </manifestEntries>
                </archive>
              </configuration>
            </execution>
            <!-- Create test jar -->
            <execution>
              <id>create-test-jar</id>
              <goals>
                <goal>test-jar</goal>
              </goals>
            </execution>
            <!-- Create javadoc jar, will be empty if javadoc generation is skipped -->
            <execution>
              <id>create-javadoc-jar</id>
              <phase>package</phase>
              <goals>
                <goal>jar</goal>
              </goals>
              <configuration>
                <classifier>javadoc</classifier>
                <classesDirectory>${project.build.directory}/apidocs/</classesDirectory>
                <includes>
                  <include>**/**</include>
                </includes>
                <excludes>
                  <exclude>javadoc.sh</exclude>
                  <exclude>javadoc.bat</exclude>
                  <exclude>options</exclude>
                  <exclude>packages</exclude>
                  <exclude>argfile</exclude>
                  <exclude>files</exclude>
                </excludes>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <!-- Licensing settings -->
        <plugin>
          <!-- Generates and validates NOTICE.txt and LICENSES.txt -->
          <groupId>org.neo4j.build.plugins</groupId>
          <artifactId>licensing-maven-plugin</artifactId>
          <version>1.7.11</version>

          <configuration>
            <failIfDisliked>true</failIfDisliked>
            <failIfMissing>true</failIfMissing>
            <plainTextReport>true</plainTextReport>
            <prependText>${licensing.prepend.text}</prependText>
            <excludedGroups>
              ^((org.neo4j){1}|(org.neo4j.community){1}|(org.neo4j.app){1}|(org.neo4j.server.plugin){1}|(org.neo4j.assembly){1}|(org.neo4j.bolt){1}|(org.neo4j.build){1}|(org.neo4j.test){1})$
            </excludedGroups>
            <!-- temporaily disabling netty-tcnative-classes whilst licence issue is corrected-->
            <excludedArtifacts>^((neo4j-browser)|(netty-tcnative-classes))$</excludedArtifacts>
            <includedScopes>compile</includedScopes>
          </configuration>
          <executions>
            <execution>
              <id>list-all-licenses</id>
              <phase>compile</phase>
              <goals>
                <goal>check</goal>
              </goals>
              <configuration>
                <licensingRequirementFiles>
                  <licensingRequirementFile>licensing/licensing-requirements-base.xml</licensingRequirementFile>
                </licensingRequirementFiles>
                <thirdPartyLicensingFilename>${project.artifactId}-${project.version}-NOTICE.txt
                </thirdPartyLicensingFilename>
                <checkExistingNoticeFile>${project.build.directory}/../NOTICE.txt</checkExistingNoticeFile>
                <listPrependText>licensing/list-prefix.txt</listPrependText>
                <listReport>${project.artifactId}-${project.version}-LICENSES.txt</listReport>
                <checkExistingLicensesFile>${project.build.directory}/../LICENSES.txt</checkExistingLicensesFile>
              </configuration>
            </execution>
          </executions>
          <dependencies>
            <dependency>
              <groupId>org.neo4j.build</groupId>
              <artifactId>resources</artifactId>
              <version>${build-resources.version}</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <!-- Updates and validates source code headers -->
          <groupId>com.mycila</groupId>
          <artifactId>license-maven-plugin</artifactId>
          <version>4.3</version>
          <executions>
            <execution>
              <id>check-licenses</id>
              <!-- fail as early as possible -->
              <phase>initialize</phase>
              <goals>
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <strictCheck>true</strictCheck>
            <header>${license-text.header}</header>
            <includes>
              <include>src/**/*.java</include>
              <include>src/**/*.js</include>
              <include>src/**/*.scala</include>
              <include>src/**/*.xml</include>
              <include>src/**/*.feature</include>
              <include>src/**/*.g4</include>
            </includes>
            <excludes>
              <exclude>**/cypher-shell/*</exclude>
              <exclude>**/apoc/*</exclude>
            </excludes>
            <mapping>
              <java>SLASHSTAR_STYLE</java>
              <scala>SLASHSTAR_STYLE</scala>
              <feature>SCRIPT_STYLE</feature>
              <g4>SLASHSTAR_STYLE</g4>
            </mapping>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>org.neo4j.build</groupId>
              <artifactId>resources</artifactId>
              <version>${build-resources.version}</version>
            </dependency>
          </dependencies>
        </plugin>

        <plugin>
          <!-- Generates LICENSE.txt files -->
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>license-maven-plugin</artifactId>
          <version>2.3.0</version>
          <configuration>
            <licenseResolver>classpath://license</licenseResolver>
            <licenseName>${license.id}</licenseName>
          </configuration>
          <executions>
            <execution>
              <id>update-project-license</id>
              <goals>
                <goal>update-project-license</goal>
              </goals>
            </execution>
          </executions>
          <dependencies>
            <dependency>
              <groupId>org.neo4j.build</groupId>
              <artifactId>resources</artifactId>
              <version>${build-resources.version}</version>
            </dependency>
          </dependencies>
        </plugin>

        <!-- Default scala compile settings -->
        <plugin>
          <groupId>net.alchim31.maven</groupId>
          <artifactId>scala-maven-plugin</artifactId>
          <version>${scala-maven-plugin.version}</version>

          <configuration>
            <scalaVersion>${scala.version}</scalaVersion>
            <scalaCompatVersion>${scala.binary.version}</scalaCompatVersion>
            <recompileMode>${scala.plugin.recompileMode}</recompileMode>
            <args>
              <arg>-Xlint:_,-missing-interpolator</arg>
              <arg>-target:jvm-${scala.target.vm}</arg>
              <arg>-nobootcp</arg>
              <!-- We need to be able to deprecate APIs and have some time for all teams to adapt. -->
              <arg>-Wconf:cat=deprecation:is</arg>
            </args>
            <jvmArgs>
              <jvmArg>-Xms256m</jvmArg>
              <jvmArg>-Xmx1024m</jvmArg>
              <jvmArg>-Xss4M</jvmArg>
            </jvmArgs>
            <secondaryCacheDir>${java.io.tmpdir}</secondaryCacheDir>
          </configuration>

          <!-- This is needed to mix scala and java code in the same module -->
          <executions>
            <execution>
              <id>scala-compile</id>
              <phase>process-resources</phase>
              <goals>
                <goal>add-source</goal>
                <goal>compile</goal>
              </goals>
            </execution>
            <execution>
              <id>scala-test-compile</id>
              <phase>process-test-resources</phase>
              <goals>
                <goal>testCompile</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <!-- Enforce naming if packages -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>3.4.1</version>
          <dependencies>
            <dependency>
              <groupId>de.skuzzle.enforcer</groupId>
              <artifactId>restrict-imports-enforcer-rule</artifactId>
              <version>2.5.0</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>default</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <rules>
                  <dependencyConvergence/>
                  <evaluateBeanshell>
                    <message>Maven module has to be in a "groupId" beginning with "org.neo4j"</message>
                    <condition>{String s = "${project.groupId}"; s.startsWith("org.neo4j");}</condition>
                  </evaluateBeanshell>
                  <requireFilesDontExist>
                    <message>You are not allowed to have classes in "com" package</message>
                    <files>
                      <file>${project.build.sourceDirectory}/com</file>
                      <file>${project.build.testSourceDirectory}/com</file>
                    </files>
                  </requireFilesDontExist>
                  <requireFilesDontExist>
                    <files>
                      <file>enterprise</file>
                    </files>
                  </requireFilesDontExist>
                  <requireMavenVersion>
                    <version>${required.maven.version}</version>
                  </requireMavenVersion>
                  <RestrictImports>
                    <reason>Star imports are not allowed, please configure your editor to substitute them with fully
                      qualified imports.
                    </reason>
                    <bannedImport>**.'*'</bannedImport>
                  </RestrictImports>
                </rules>
                <fail>true</fail>
              </configuration>
            </execution>
              <execution>
                  <!-- Ban messing up the build by depending on test-jars from non-test scope -->
                  <id>ban-test-dependencies-in-compile</id>
                  <goals>
                      <goal>enforce</goal>
                  </goals>
                  <configuration>
                      <rules>
                          <bannedDependencies>
                              <excludes>
                                  <exclude>org.junit.*:*:*:*:compile</exclude>
                                  <!-- ban all neo4j modules with test in the artifact name -->
                                  <exclude>org.neo4j:*test*:*:*:compile</exclude>
                                  <exclude>com.neo4j:*test*:*:*:compile</exclude>
                                  <!-- ban all neo4j modules under org/com.neo4j.test -->
                                  <exclude>org.neo4j.test*:*:*:*:compile</exclude>
                                  <exclude>com.neo4j.test*:*:*:*:compile</exclude>
                                  <!-- ban neo4j-harness dependencies -->
                                  <exclude>com.neo4j.test:neo4j-harness-enterprise:*:compile</exclude>
                                  <exclude>org.neo4j.test:neo4j-harness:*:compile</exclude>
                                  <!-- ban neo4j modules we definitely know are internal only -->
                                  <exclude>com.neo4j.bench:*:*:*:compile</exclude>
                                  <!-- ban public/community/testing utilities -->
                                  <exclude>com.neo4j:enterprise-integration-tests:*:*:compile</exclude>
                                  <exclude>com.neo4j:neo4j-net-test-utils:*:*:compile</exclude>
                                  <exclude>com.neo4j:lighthouse-testbed:*:*:compile</exclude>
                                  <exclude>com.neo4j:lighthouse-common-test:*:*:compile</exclude>
                                  <exclude>com.neo4j:neo4j-tools:*:*:compile</exclude>
                                  <exclude>org.neo4j:*test*:*:*:compile</exclude>
                                  <exclude>org.neo4j:*-test-util:*:*:compile</exclude>
                                  <exclude>org.neo4j:*-test-utils:*:*:compile</exclude>
                                  <exclude>org.neo4j:neo4j-cypher-spec-suite-tools:*:*:compile</exclude>
                                  <exclude>org.neo4j:neo4j-cypher-testing:*:*:compile</exclude>
                                  <exclude>org.neo4j:neo4j-random-values:*:*:compile</exclude>
                                  <exclude>org.neo4j:neo4j-test-util:*:*:compile</exclude>
                                  <exclude>org.neo4j:test-proxy:*:*:compile</exclude>
                                  <exclude>org.neo4j:test-utils:*:*:compile</exclude>
                                  <exclude>org.neo4j:testing-parent:*:*:compile</exclude>
                                  <exclude>org.neo4j.app:neo4j-server-test-utils:*:*:compile</exclude>
                                  <exclude>org.neo4j.community:it-test-support:*:*:compile</exclude>
                              </excludes>
                              <searchTransitive>true</searchTransitive>
                              <message>Depending on test jars in compile scope is banned</message>
                          </bannedDependencies>
                      </rules>
                      <fail>true</fail>
                  </configuration>
              </execution>
          </executions>
        </plugin>

        <!-- Plugin version management -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.13.0</version>
          <configuration>
            <showDeprecation>true</showDeprecation>
            <showWarnings>true</showWarnings>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.6.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.3.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.3.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>
          <version>3.1.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.5.3</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.3.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>3.5.3</version>
          <dependencies>
            <dependency>
              <groupId>org.ow2.asm</groupId>
              <artifactId>asm</artifactId>
              <version>${asm.version}</version>
            </dependency>
            <dependency>
              <groupId>org.ow2.asm</groupId>
              <artifactId>asm-commons</artifactId>
              <version>${asm.version}</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.7.1</version>
          <configuration>
            <tarLongFileMode>gnu</tarLongFileMode>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>3.1.1</version>
        </plugin>
        <plugin>
          <groupId>org.owasp</groupId>
          <artifactId>dependency-check-maven</artifactId>
          <version>8.3.1</version>
          <executions>
            <execution>
              <goals>
                <goal>aggregate</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>3.9.1.2184</version>
        </plugin>
      </plugins>
    </pluginManagement>

    <!-- Default plugins -->
    <plugins>

      <!-- Execute integration tests by default -->
      <plugin>
        <artifactId>maven-failsafe-plugin</artifactId>
      </plugin>

      <!-- Spotless is used for checkstyle and automatic code formatting -->
      <plugin>
        <groupId>com.diffplug.spotless</groupId>
        <artifactId>spotless-maven-plugin</artifactId>
        <version>2.43.0</version>
        <executions>
          <execution>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <upToDateChecking>
            <enabled>true</enabled>
          </upToDateChecking>
          <java>
            <palantirJavaFormat>
              <version>2.46.0</version>
            </palantirJavaFormat>
          </java>
          <scala>
            <scalafmt>
              <file>scalafmt/scalafmt.conf</file>
            </scalafmt>
          </scala>
            <antlr4>
              <!-- These are the defaults, you can override if you want -->
              <includes>
                <include>src/*/antlr4/**/*.g4</include>
              </includes>
<!--              <antlr4Formatter /> &lt;!&ndash; has its own section below &ndash;&gt;-->
            </antlr4>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.neo4j.build</groupId>
            <artifactId>resources</artifactId>
            <version>${build-resources.version}</version>
          </dependency>
        </dependencies>
      </plugin>

      <!-- Creates source jar if source exits -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <!-- Enable Public API checks -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <goals>
              <goal>set-system-properties</goal>
            </goals>
            <configuration>
              <properties>
                <property>
                  <name>enablePublicApiSignatureCheck</name>
                  <value>true</value>
                </property>
              </properties>
            </configuration>
          </execution>
        </executions>
      </plugin>

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

    </plugins>
  </build>

  <profiles>
    <profile>
      <id>errorprone</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <fork>true</fork>
              <compilerArgs>
                <arg>-XDcompilePolicy=simple</arg>
                <arg>-Xplugin:ErrorProne -Xep:MissingSummary:OFF -Xep:EmptyBlockTag:OFF -Xep:MalformedInlineTag:OFF -Xep:EqualsGetClass:OFF \
                  -Xep:StringSplitter:OFF -Xep:BadImport:OFF -Xep:InvalidBlockTag:OFF -Xep:InvalidInlineTag:OFF -Xep:AnnotateFormatMethod:OFF \
                  -Xep:ImmutableEnumChecker:OFF -Xep:UnescapedEntity:OFF -Xep:InvalidParam:OFF -Xep:JavaLangClash:OFF -Xep:ReturnValueIgnored:OFF \
                  -Xep:FutureReturnValueIgnored:OFF -Xep:UnusedVariable:OFF -Xep:UnnecessaryLambda:OFF -Xep:DefaultCharset:OFF -Xep:UnnecessaryParentheses:OFF \
                  -Xep:OperatorPrecedence:OFF -Xep:IntLongMath:OFF -Xep:InlineFormatString:OFF -Xep:ReferenceEquality:OFF -Xep:NonOverridingEquals:OFF \
                  -Xep:NarrowingCompoundAssignment:OFF -Xep:JavaLocalDateTimeGetNano:OFF -Xep:JavaLocalTimeGetNano:OFF \
                  -Xep:SelfComparison:WARN -Xep:BadAnnotationImplementation:WARN -Xep:ModifyingCollectionWithItself:WARN \
                  -Xep:BoxedPrimitiveEquality:WARN -Xep:BanJNDI:WARN -Xep:CanIgnoreReturnValueSuggester:OFF \
                  -Xep:ByteBufferBackingArray:OFF -Xep:LongDoubleConversion:OFF -Xep:NarrowCalculation:OFF \
                  -Xep:JavaUtilDate:OFF -Xep:JavaTimeDefaultTimeZone:OFF -Xep:SameNameButDifferent:OFF \
                  -Xep:EmptyCatch:OFF -Xep:TypeParameterUnusedInFormals:OFF -Xep:ThreadPriorityCheck:OFF \
                  -Xep:NonApiType:OFF -Xep:StaticAssignmentOfThrowable:OFF \
                  -XepExcludedPaths:.*/target/generated-sources/.*</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
              </compilerArgs>
              <annotationProcessorPaths>
                <path>
                  <groupId>com.google.errorprone</groupId>
                  <artifactId>error_prone_core</artifactId>
                  <version>${error_prone_annotations.version}</version>
                </path>
              </annotationProcessorPaths>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Only generate NOTICE and LICENSES files for projects with src/ directory -->
    <profile>
      <id>has-sources</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <file>
          <exists>src</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.neo4j.build.plugins</groupId>
            <artifactId>licensing-maven-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>com.mycila</groupId>
            <artifactId>license-maven-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>license-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Disable parallel execution with "-DsequentialTests" -->
    <profile>
      <id>parallelTestExecution</id>
      <activation>
        <property>
          <name>!sequentialTests</name>
        </property>
      </activation>
      <properties>
        <forkCounts>1C</forkCounts>
        <parallel.tests>true</parallel.tests>
      </properties>
    </profile>
    <profile>
      <id>multiVersionRecordFormat</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <property>
          <name>NEO4J_OVERRIDE_STORE_FORMAT</name>
          <value>multiversion</value>
        </property>
      </activation>
      <properties>
        <test.runner.jvm.settings.db.format>
          -DNEO4J_OVERRIDE_STORE_FORMAT=multiversion
        </test.runner.jvm.settings.db.format>
        <excludedTestGroups>recordformatoverride</excludedTestGroups>
      </properties>
    </profile>
    <profile>
      <id>test-block</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <property>
          <name>NEO4J_OVERRIDE_STORE_FORMAT</name>
          <value>block</value>
        </property>
      </activation>
      <properties>
        <test.runner.jvm.settings.db.format>
          -DNEO4J_OVERRIDE_STORE_FORMAT=block
        </test.runner.jvm.settings.db.format>
      </properties>
    </profile>
    <profile>
      <id>test-lighthouse</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <property>
          <name>NEO4J_PARALLEL_DISCOVERY</name>
          <value>ORIGINAL_SHADOW</value>
        </property>
      </activation>
      <properties>
        <test.runner.jvm.settings.db.format>
          -DNEO4J_PARALLEL_DISCOVERY=ORIGINAL_SHADOW
        </test.runner.jvm.settings.db.format>
      </properties>
    </profile>
    <profile>
      <id>zinc</id>
      <properties>
        <scala.plugin.recompileMode>incremental</scala.plugin.recompileMode>
      </properties>
    </profile>
    <profile>
      <id>build-service</id>
      <activation>
        <property>
          <name>build.service.target.dir</name>
        </property>
      </activation>
      <build>
        <directory>${build.service.target.dir}</directory>
      </build>
    </profile>
  </profiles>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.lz4</groupId>
        <artifactId>lz4-java</artifactId>
        <version>1.8.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-layout-template-json</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.jettison</groupId>
        <artifactId>jettison</artifactId>
        <version>1.5.4</version>
      </dependency>
      <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>5.14.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-analysis-common</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-core</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-backward-codecs</artifactId>
        <version>${lucene.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-queryparser</artifactId>
        <version>${lucene.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queries</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-sandbox</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>2.0.0</version>
        <exclusions>
          <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>*</groupId>
            <artifactId>shiro-config-ogdl</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
        <version>${caffeine.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-qual</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>io.airlift</groupId>
        <artifactId>airline</artifactId>
        <version>0.9</version>
        <exclusions>
          <exclusion>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.hdrhistogram</groupId>
        <artifactId>HdrHistogram</artifactId>
        <version>2.1.12</version>
      </dependency>
      <dependency>
        <groupId>com.github.jbellis</groupId>
        <artifactId>jamm</artifactId>
        <version>${jamm.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bitbucket.b_c</groupId>
        <artifactId>jose4j</artifactId>
        <version>0.9.6</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-configuration2</artifactId>
        <version>2.10.1</version>
      </dependency>
      <!--
       - Please note that when updating this dependency (i.e. due to a security vulnerability or bug) that the corresponding driver dependency also
       - needs updating.
       -->
      <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-bom</artifactId>
        <version>2023.0.6</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.neo4j.driver</groupId>
        <artifactId>neo4j-java-driver</artifactId>
        <version>${neo4j-java-driver.version}</version>
      </dependency>


      <!-- testing -->
      <dependency>
        <groupId>org.apache.directory.server</groupId>
        <artifactId>apacheds-server-integ</artifactId>
        <version>2.0.0.AM27</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>ldapsdk</groupId>
            <artifactId>ldapsdk</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava-testlib</artifactId>
        <version>${guava.version}</version>
        <scope>test</scope>
      </dependency>
	  <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-testkit</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>org.junit.platform</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.25.3</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest</artifactId>
        <version>2.2</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>co.unruly</groupId>
        <artifactId>java-8-matchers</artifactId>
        <version>1.6</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>${mockito.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.awaitility</groupId>
        <artifactId>awaitility</artifactId>
        <version>${awaitility.version}</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.17.0</version>
      </dependency>

      <dependency>
        <groupId>org.netbeans.modules</groupId>
        <artifactId>org-netbeans-lib-profiler</artifactId>
        <version>RELEASE210</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.openjdk.jol</groupId>
        <artifactId>jol-core</artifactId>
        <version>0.17</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.mockftpserver</groupId>
        <artifactId>MockFtpServer</artifactId>
        <version>3.1.0</version>
        <scope>test</scope>
      </dependency>

      <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <version>${antlr.version}</version>
      </dependency>

      <!-- scala -->
      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-reflect</artifactId>
        <version>${scala.version}</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scalap</artifactId>
        <version>${scala.version}</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang.modules</groupId>
        <artifactId>scala-collection-contrib_2.13</artifactId>
        <version>0.3.0</version>
      </dependency>


      <!-- scala test dependencies -->
      <dependency>
        <groupId>org.scalatest</groupId>
        <artifactId>scalatest_${scala.binary.version}</artifactId>
        <version>${scala.test.version}</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <artifactId>scala-library</artifactId>
            <groupId>org.scala-lang</groupId>
          </exclusion>
          <exclusion>
            <artifactId>scala-reflect</artifactId>
            <groupId>org.scala-lang</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.scalatest</groupId>
        <artifactId>scalatest-funsuite_${scala.binary.version}</artifactId>
        <version>${scala.test.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.scalatestplus</groupId>
        <artifactId>mockito-4-6_${scala.binary.version}</artifactId>
        <version>${scala.test.version}.0</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>co.helmethair</groupId>
        <artifactId>scalatest-junit-runner</artifactId>
        <version>0.2.0</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.scalautils</groupId>
        <artifactId>scalautils_${scala.binary.version}</artifactId>
        <version>2.1.7</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <artifactId>scala-library</artifactId>
            <groupId>org.scala-lang</groupId>
          </exclusion>
          <exclusion>
            <artifactId>scala-reflect</artifactId>
            <groupId>org.scala-lang</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.scalatestplus</groupId>
        <artifactId>scalacheck-1-16_${scala.binary.version}</artifactId>
        <version>${scala.test.version}.0</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.json4s</groupId>
        <artifactId>json4s-native_${scala.binary.version}</artifactId>
        <version>3.6.11</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.lihaoyi</groupId>
        <artifactId>pprint_${scala.binary.version}</artifactId>
        <version>0.6.0</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>io.circe</groupId>
        <artifactId>circe-core_${scala.binary.version}</artifactId>
        <version>0.14.1</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>io.circe</groupId>
        <artifactId>circe-generic_${scala.binary.version}</artifactId>
        <version>0.14.1</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>io.circe</groupId>
        <artifactId>circe-parser_${scala.binary.version}</artifactId>
        <version>0.14.1</version>
        <scope>test</scope>
      </dependency>

      <!-- other -->
      <dependency>
        <groupId>org.eclipse.collections</groupId>
        <artifactId>eclipse-collections</artifactId>
        <version>${eclipse-collections.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jctools</groupId>
        <artifactId>jctools-core</artifactId>
        <version>4.0.3</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.16.1</version>
      </dependency>
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.3.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.14.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>1.12.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.26.1</version>
      </dependency>
      <dependency>
        <groupId>com.github.luben</groupId>
        <artifactId>zstd-jni</artifactId>
        <version>1.5.6-3</version>
      </dependency>

      <!--
       - Please note that when updating this dependency (i.e. due to a security vulnerability or bug) that the corresponding driver dependency also
       - needs updating.
       -->
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-bom</artifactId>
        <version>4.1.110.Final</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey.version}</version>
        <exclusions>
          <exclusion>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.glassfish.hk2.external</groupId>
            <artifactId>javax.inject</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>${jersey.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.glassfish.hk2.external</groupId>
            <artifactId>aopalliance-repackaged</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.glassfish.hk2.external</groupId>
            <artifactId>javax.inject</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.glassfish.hk2</groupId>
            <artifactId>osgi-resource-locator</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>jakarta.ws.rs</groupId>
        <artifactId>jakarta.ws.rs-api</artifactId>
        <version>${jakarta.ws.rs-api.version}</version>
      </dependency>
      <dependency>
        <groupId>jakarta.activation</groupId>
        <artifactId>jakarta.activation-api</artifactId>
        <version>${jakarta.activation-api.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson-databind.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty.http2</groupId>
        <artifactId>http2-server</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-alpn-server</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-alpn-java-server</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>${jetty.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-util-ajax</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-jetty-client</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk18on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk18on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>${metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-jmx</artifactId>
        <version>${metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-graphite</artifactId>
        <version>${metrics.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jprocesses</groupId>
        <artifactId>jProcesses</artifactId>
        <version>1.6.5</version>
      </dependency>

      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>provided</scope>
        <exclusions>
          <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.google.testing.compile</groupId>
        <artifactId>compile-testing</artifactId>
        <version>0.21.0</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>com.google.truth</groupId>
            <artifactId>truth</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.truth.extensions</groupId>
            <artifactId>truth-java8-extension</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.auto</groupId>
            <artifactId>auto-common</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-qual</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.google.auto.service</groupId>
        <artifactId>auto-service</artifactId>
        <version>1.1.1</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.auto</groupId>
            <artifactId>auto-common</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.google.auto</groupId>
        <artifactId>auto-common</artifactId>
        <version>1.2.2</version>
        <exclusions>
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-qual</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.google.truth</groupId>
        <artifactId>truth</artifactId>
        <version>1.4.2</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-qual</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.2</version>
      </dependency>
      <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>2.3.2</version>
      </dependency>
      <dependency>
        <groupId>jakarta.inject</groupId>
        <artifactId>jakarta.inject-api</artifactId>
        <version>1.0</version>
      </dependency>
      <dependency>
        <groupId>info.picocli</groupId>
        <artifactId>picocli</artifactId>
        <version>${picocli.version}</version>
      </dependency>
      <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>annotations</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>3.25.2</version>
      </dependency>
      <dependency>
        <groupId>com.google.errorprone</groupId>
        <artifactId>error_prone_annotations</artifactId>
        <version>${error_prone_annotations.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy</artifactId>
        <version>1.14.14</version>
      </dependency>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>${awssdk.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>libraries-bom</artifactId>
        <version>${google.cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
        <exclusions>
          <exclusion>
            <groupId>io.grpc</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-api</artifactId>
        <version>${grpc.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-context</artifactId>
        <version>${grpc.version}</version>
      </dependency>
      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>${grpc.version}</version>
      </dependency>
      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-core</artifactId>
        <version>${grpc.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>animal-sniffer-annotations</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.android</groupId>
            <artifactId>annotations</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty</artifactId>
        <version>${grpc.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>${grpc.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>
