<?xml version="1.0" encoding="UTF-8"?>
<!--

    Copyright (C) 2020 Graylog, Inc.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the Server Side Public License, version 1,
    as published by MongoDB, Inc.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    Server Side Public License for more details.

    You should have received a copy of the Server Side Public License
    along with this program. If not, see
    <http://www.mongodb.com/licensing/server-side-public-license>.

-->
<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>
    <modules>
        <module>graylog-project-parent</module>
        <module>graylog-plugin-parent</module>
        <module>graylog-plugin-archetype</module>
        <module>graylog-storage-elasticsearch7</module>
        <module>graylog-storage-opensearch2</module>
        <module>distribution</module>
    </modules>

    <groupId>org.graylog</groupId>
    <artifactId>graylog-parent</artifactId>
    <version>6.0.1</version>
    <packaging>pom</packaging>

    <name>Graylog Parent POM</name>
    <description>Graylog Parent POM</description>
    <url>https://www.graylog.org/</url>

    <licenses>
        <license>
            <name>Server Side Public License (SSPL) version 1</name>
            <url>https://www.mongodb.com/licensing/server-side-public-license</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <organization>
        <name>Graylog, Inc.</name>
        <url>https://www.graylog.org/</url>
    </organization>

    <developers>
        <developer>
            <name>${project.organization.name}</name>
            <organization>${project.organization.name}</organization>
            <organizationUrl>${project.organization.url}</organizationUrl>
        </developer>
    </developers>

    <scm>
        <connection>scm:git:git@github.com:Graylog2/graylog2-server.git</connection>
        <developerConnection>scm:git:git@github.com:Graylog2/graylog2-server.git</developerConnection>
        <url>https://github.com/Graylog2/graylog2-server</url>
        <tag>HEAD</tag>
    </scm>

    <distributionManagement>
        <snapshotRepository>
            <id>sonatype-nexus-snapshots</id>
            <name>Sonatype Nexus Snapshots</name>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <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>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.release>17</maven.compiler.release>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <maven.compiler.useIncrementalCompilation>false</maven.compiler.useIncrementalCompilation>

        <!-- Dependencies -->
        <opensearch.shaded.version>2.12.0-2</opensearch.shaded.version>
        <airline.version>3.0.0</airline.version>
        <amqp-client.version>5.20.0</amqp-client.version>
        <antlr.version>4.13.1</antlr.version>
        <apache-directory-version>1.0.3</apache-directory-version>
        <apache-httpclient.version>4.5.14</apache-httpclient.version>
        <apache-httpcore.version>4.4.16</apache-httpcore.version>
        <asm.version>9.6</asm.version>
        <auto-service.version>1.1.1</auto-service.version>
        <auto-value.version>1.10.4</auto-value.version>
        <auto-value-javabean.version>2.5.2</auto-value-javabean.version>
        <aws-java-sdk-1.version>1.12.675</aws-java-sdk-1.version>
        <aws-java-sdk-2.version>2.25.6</aws-java-sdk-2.version>
        <aws-kinesis-client.version>2.5.7</aws-kinesis-client.version>
        <aws-msk-iam-auth.version>2.0.3</aws-msk-iam-auth.version>
        <bouncycastle.version>1.77</bouncycastle.version>
        <byte-buddy.version>1.14.12</byte-buddy.version>
        <caffeine.version>3.1.8</caffeine.version>
        <cef-parser.version>0.0.1.10</cef-parser.version>
        <classgraph.version>4.8.168</classgraph.version>
        <commons-codec.version>1.16.1</commons-codec.version>
        <commons-csv.version>1.10.0</commons-csv.version>
        <commons-email.version>1.6.0</commons-email.version>
        <commons-exec.version>1.4.0</commons-exec.version>
        <commons-lang3.version>3.14.0</commons-lang3.version>
        <commons-net.version>3.10.0</commons-net.version>
        <commons-validator.version>1.8.0</commons-validator.version>
        <commons-io.version>2.15.1</commons-io.version>
        <disruptor.version>4.0.0</disruptor.version>
        <error-prone.version>2.26.1</error-prone.version>
        <freemarker.version>2.3.32</freemarker.version>
        <gelfclient.version>1.5.1</gelfclient.version>
        <geoip2.version>4.2.0</geoip2.version>
        <grok.version>0.1.9-graylog-2</grok.version>
        <grpc.version>1.62.2</grpc.version>
        <guava-retrying.version>2.0.0</guava-retrying.version>
        <guava.version>33.1.0-jre</guava.version>
        <guice.version>7.0.0</guice.version>
        <HdrHistogram.version>2.1.12</HdrHistogram.version>
        <hamcrest.version>2.2</hamcrest.version>
        <hibernate-validator.version>8.0.1.Final</hibernate-validator.version>
        <hk2.version>3.1.0</hk2.version> <!-- The HK2 version should match the version being used by Jersey -->
        <jackson.version>2.17.0</jackson.version>
        <jadconfig.version>0.14.0</jadconfig.version>
        <java-semver.version>0.9.0</java-semver.version>
        <javax.annotation-api.version>1.3.2</javax.annotation-api.version>
        <jakarta.annotation-api.version>2.1.1</jakarta.annotation-api.version>
        <jakarta.inject.version>2.0.1</jakarta.inject.version>
        <jakarta.ws.rs-api.version>3.1.0</jakarta.ws.rs-api.version>
        <jaxb-api.version>2.3.1</jaxb-api.version>
        <jbcrypt.version>0.4</jbcrypt.version>
        <jcip-annotations.version>1.0</jcip-annotations.version>
        <jdot.version>1.0</jdot.version>
        <jersey.version>3.1.5</jersey.version>
        <jmte.version>7.0.2</jmte.version>
        <joda-time.version>2.12.7</joda-time.version>
        <jool.version>0.9.15</jool.version>
        <json-path.version>2.9.0</json-path.version>
        <kafka.version>3.7.0</kafka.version>
        <kafka09.version>0.9.0.1-7</kafka09.version>
        <log4j.version>2.23.1</log4j.version>
        <lucene.version>9.10.0</lucene.version>
        <metrics.version>4.2.25</metrics.version>
        <mongodb-driver.version>5.0.0</mongodb-driver.version>
        <mongojack.version>4.11.0</mongojack.version>
        <natty.version>0.13</natty.version>
        <netty.version>4.1.108.Final</netty.version>
        <netty-tcnative-boringssl-static.version>2.0.65.Final</netty-tcnative-boringssl-static.version>
        <okhttp.version>4.12.0</okhttp.version>
        <opencsv.version>2.3</opencsv.version>
        <opentelemetry.version>1.32.0</opentelemetry.version>
        <os-platform-finder.version>1.2.3</os-platform-finder.version>
        <pkts.version>3.0.10</pkts.version>
        <prometheus-client.version>0.16.0</prometheus-client.version>
        <protobuf.version>3.25.3</protobuf.version>
        <reflections.version>0.10.2</reflections.version>
        <retrofit.version>2.9.0</retrofit.version>
        <semver4j.version>2.2.0-graylog.1</semver4j.version>
        <shiro.version>2.0.0</shiro.version>
        <snakeyaml.version>2.2</snakeyaml.version>
        <snappy-java.version>1.1.10.5</snappy-java.version>
        <oshi.version>6.5.0</oshi.version>
        <siv-mode.version>1.5.0</siv-mode.version>
        <slf4j.version>2.0.12</slf4j.version>
        <streamex.version>0.8.2</streamex.version>
        <swagger.version>1.6.14</swagger.version>
        <syslog4j.version>0.9.61</syslog4j.version>
        <ulid.version>8.3.0</ulid.version>
        <unboundid-ldap.version>7.0.0</unboundid-ldap.version>
        <uuid.version>3.2.1</uuid.version>
        <validation-api.version>3.0.2</validation-api.version>
        <zstd.version>1.5.5-11</zstd.version>
        <cron-utils.version>9.2.1</cron-utils.version>
        <asciitable.version>0.3.2</asciitable.version>
        <jjwt.version>0.12.5</jjwt.version>
        <stateless4j.version>2.6.0</stateless4j.version>

        <!-- Test dependencies -->
        <apacheds-server.version>2.0.0-M24</apacheds-server.version>
        <assertj-core.version>3.25.3</assertj-core.version>
        <assertj-joda-time.version>2.2.0</assertj-joda-time.version>
        <awaitility.version>4.2.1</awaitility.version>
        <equalsverifier.version>3.16</equalsverifier.version>
        <jukito.version>1.5</jukito.version>
        <junit.version>4.13.2</junit.version>
        <junit-jupiter.version>5.10.2</junit-jupiter.version>
        <mockito.version>5.11.0</mockito.version>
        <restassured.version>5.4.0</restassured.version>
        <system-rules.version>1.19.0</system-rules.version>
        <testcontainers.version>1.19.7</testcontainers.version>
        <testcontainers.opensearch.version>2.0.1</testcontainers.opensearch.version>

        <!-- Nodejs dependencies -->
        <nodejs.version>v18.18.0</nodejs.version>
        <yarn.version>v1.22.19</yarn.version>

        <!-- Plugin versions -->
        <license-maven.version>4.3</license-maven.version>
        <download-maven-plugin.version>1.6.8.1</download-maven-plugin.version>
    </properties>


    <!-- Ensure consistent versions across dependencies and transitive dependencies -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-bom</artifactId>
                <version>${log4j.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${apache-httpclient.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpmime</artifactId>
                <version>${apache-httpclient.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>${apache-httpcore.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore-nio</artifactId>
                <version>${apache-httpcore.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-bom</artifactId>
                <version>${netty.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>${aws-java-sdk-2.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.amazonaws</groupId>
                <artifactId>aws-java-sdk-bom</artifactId>
                <version>${aws-java-sdk-1.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-tcnative-boringssl-static</artifactId>
                <version>${netty-tcnative-boringssl-static.version}</version>
                <classifier>osx-x86_64</classifier>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-tcnative-boringssl-static</artifactId>
                <version>${netty-tcnative-boringssl-static.version}</version>
                <classifier>linux-x86_64</classifier>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.luben</groupId>
                <artifactId>zstd-jni</artifactId>
                <version>${zstd.version}</version>
            </dependency>
            <dependency>
                <groupId>com.jayway.jsonpath</groupId>
                <artifactId>json-path</artifactId>
                <version>${json-path.version}</version>
            </dependency>
            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm</artifactId>
                <version>${asm.version}</version>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>${joda-time.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson</groupId>
                <artifactId>jackson-bom</artifactId>
                <version>${jackson.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.yaml</groupId>
                <artifactId>snakeyaml</artifactId>
                <version>${snakeyaml.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-api</artifactId>
                <version>${jjwt.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-impl</artifactId>
                <version>${jjwt.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-jackson</artifactId>
                <version>${jjwt.version}</version>
            </dependency>
            <dependency>
                <groupId>org.xerial.snappy</groupId>
                <artifactId>snappy-java</artifactId>
                <version>${snappy-java.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-bom</artifactId>
                <version>${protobuf.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Still needed because the protobuf compiler adds javax.annotation.Generated
                 annotations to generated classes -->
            <dependency>
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
                <version>${javax.annotation-api.version}</version>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-bom</artifactId>
                <version>${grpc.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.cronutils</groupId>
                <artifactId>cron-utils</artifactId>
                <version>${cron-utils.version}</version>
            </dependency>
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>${okhttp.version}</version>
            </dependency>
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp-tls</artifactId>
                <version>${okhttp.version}</version>
            </dependency>
            <!-- Explicitly manage avro to fix CVE-2023-39410. We are using this only as a transitive dependency in
                 plugins. Remove once its usages are updated and the fixed version is pulled in automatically. -->
            <dependency>
                <groupId>org.apache.avro</groupId>
                <artifactId>avro</artifactId>
                <version>1.11.3</version>
            </dependency>
            <!-- Explicitly manage commons-compress to fix CVE-2023-42503. We are using this only as a transitive
                 dependency in plugins. Remove once its usages are updated and the fixed version is pulled in
                 automatically. -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>1.26.1</version>
            </dependency>

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

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

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

            <!-- Always check mongojack dependencies to see if we need to adjust our mongodb-driver dependencies -->
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongodb-driver-sync</artifactId>
                <version>${mongodb-driver.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongodb-driver-legacy</artifactId>
                <version>${mongodb-driver.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mongojack</groupId>
                <artifactId>mongojack</artifactId>
                <version>${mongojack.version}</version>
            </dependency>

            <!-- test -->
            <dependency>
                <groupId>org.junit</groupId>
                <artifactId>junit-bom</artifactId>
                <version>${junit-jupiter.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-bom</artifactId>
                <version>${mockito.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest</artifactId>
                <version>${hamcrest.version}</version>
            </dependency>
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy</artifactId>
                <version>${byte-buddy.version}</version>
            </dependency>
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy-agent</artifactId>
                <version>${byte-buddy.version}</version>
            </dependency>
            <dependency>
                <groupId>org.awaitility</groupId>
                <artifactId>awaitility</artifactId>
                <version>${awaitility.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.auto.service</groupId>
                <artifactId>auto-service-annotations</artifactId>
                <version>${auto-service.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.auto.value</groupId>
                <artifactId>auto-value-annotations</artifactId>
                <version>${auto-value.version}</version>
            </dependency>
            <dependency>
                <groupId>org.graylog.autovalue</groupId>
                <artifactId>auto-value-javabean</artifactId>
                <version>${auto-value-javabean.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <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-compiler-plugin</artifactId>
                    <version>3.13.0</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-assembly-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>3.6.3</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.3.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>3.3.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.5.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>3.1.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>3.0.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>3.21.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.2.5</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>3.2.5</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>2.16.2</version>
                </plugin>
                <plugin>
                    <groupId>com.github.spotbugs</groupId>
                    <artifactId>spotbugs-maven-plugin</artifactId>
                    <version>4.8.3.1</version>
                </plugin>
                <plugin>
                    <groupId>de.thetaphi</groupId>
                    <artifactId>forbiddenapis</artifactId>
                    <version>3.7</version>
                </plugin>
                <plugin>
                    <groupId>com.github.eirslett</groupId>
                    <artifactId>frontend-maven-plugin</artifactId>
                    <version>1.15.0</version>
                </plugin>
                <plugin>
                    <groupId>org.antlr</groupId>
                    <artifactId>antlr4-maven-plugin</artifactId>
                    <version>${antlr.version}</version>
                </plugin>
                <plugin>
                    <groupId>com.mycila</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>${license-maven.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>3.4.1</version>
                </plugin>
                <plugin>
                    <groupId>org.cyclonedx</groupId>
                    <artifactId>cyclonedx-maven-plugin</artifactId>
                    <version>2.8.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <configuration>
                    <forkCount>1</forkCount>
                    <skip>false</skip>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-versions</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <fail>true</fail>
                            <failFast>false</failFast>
                            <rules>
                                <bannedDependencies>
                                    <searchTransitive>true</searchTransitive>
                                    <excludes>
                                        <!-- We use log4j-over-slf4j, so we need to make sure we don't pull in
                                             the actual log4j 1.x dependency to avoid conflicts. http://www.slf4j.org/legacy.html#log4j-over-slf4j -->
                                        <exclude>log4j:log4j</exclude>
                                        <!-- This dependency also pulls in log4j 1.x -->
                                        <exclude>org.apache.log4j.wso2:log4j</exclude>
                                        <!-- We use jcl-over-slf4j, so we need to make sure we don't pull in
                                             the actual commons-logging dependency to avoid conflicts. http://www.slf4j.org/legacy.html#jclOverSLF4J -->
                                        <exclude>commons-logging:commons-logging</exclude>
                                        <!-- Make sure we don't pull in vulnerable log4j2 versions (CVE-2021-45046, CVE-2021-44228) -->
                                        <exclude>org.apache.logging.log4j:*:(,2.16)</exclude>
                                        <!-- Pulling in slf4j-simple creates warnings about multiple SLF4J bindings on server startup -->
                                        <exclude>org.slf4j:slf4j-simple</exclude>
                                        <!-- Newer asm versions are published under the org.ow2.asm groupId. Avoid conflicts by banning the old one.  -->
                                        <exclude>asm:asm</exclude>
                                        <!-- Mockito should by now have all the features we need. -->
                                        <exclude>org.powermock</exclude>
                                        <!-- Ban AWS SDK bundle dependencies for v1 and v2. These would add hundreds of
                                             megabytes to our production artifacts and must be avoided. -->
                                        <exclude>com.amazonaws:aws-java-sdk-bundle</exclude>
                                        <exclude>software.amazon.awssdk:bundle</exclude>
                                        <!-- Ban some javax dependencies after the move to jakarta -->
                                        <exclude>javax.inject:*</exclude>
                                        <exclude>javax.ws.rs:javax.*</exclude>
                                        <exclude>com.fasterxml.jackson.jaxrs:*</exclude>
                                    </excludes>
                                </bannedDependencies>
                                <banDuplicatePomDependencyVersions/>
                                <requireMavenVersion>
                                    <!-- Enforce the same version we define in the maven wrapper -->
                                    <version>[3.9.6]</version>
                                </requireMavenVersion>
                                <requireJavaVersion>
                                    <version>[17.0,17.99]</version>
                                </requireJavaVersion>
                                <requireOS>
                                    <family>unix</family>
                                </requireOS>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>de.thetaphi</groupId>
                <artifactId>forbiddenapis</artifactId>
                <configuration>
                    <suppressAnnotations>
                        <suppressAnnotation>org.graylog2.shared.SuppressForbidden</suppressAnnotation>
                    </suppressAnnotations>
                    <!-- if the used Java version is too new, don't fail, just do nothing: -->
                    <failOnUnsupportedJava>false</failOnUnsupportedJava>
                    <failOnViolation>true</failOnViolation>
                    <bundledSignatures>
                        <!-- We want to allow String#formatted without charset. -->
                        <bundledSignature>jdk-unsafe-14</bundledSignature>
                        <!-- This will automatically choose the right signatures based on 'maven.compiler.target': -->
                        <bundledSignature>jdk-deprecated</bundledSignature>
                        <bundledSignature>jdk-reflection</bundledSignature>
                        <!-- disallow undocumented classes like sun.misc.Unsafe: -->
                        <bundledSignature>jdk-non-portable</bundledSignature>
                        <!-- Workaround until signatures for ${commons-io.version} are released: -->
                        <bundledSignature>commons-io-unsafe-2.14.0</bundledSignature>
                    </bundledSignatures>
                    <signatures>
                        <![CDATA[
                            org.jboss.netty.** @ Migrate to Netty 4.x

                            @defaultMessage Use a custom thread factory to ensure proper thread naming.
                            java.util.concurrent.Executors#defaultThreadFactory()
                            java.util.concurrent.Executors#newCachedThreadPool()
                            java.util.concurrent.Executors#newFixedThreadPool(int)
                            java.util.concurrent.Executors#newScheduledThreadPool(int)
                            java.util.concurrent.Executors#newSingleThreadExecutor()
                            java.util.concurrent.Executors#newSingleThreadScheduledExecutor()
                            java.util.concurrent.Executors#privilegedThreadFactory()

                            @defaultMessage Constructing a DateTime without a time zone is dangerous
                            org.joda.time.DateTime#<init>()
                            org.joda.time.DateTime#<init>(long)
                            org.joda.time.DateTime#<init>(int, int, int, int, int)
                            org.joda.time.DateTime#<init>(int, int, int, int, int, int)
                            org.joda.time.DateTime#<init>(int, int, int, int, int, int, int)
                            org.joda.time.DateTime#now()
                            org.joda.time.DateTimeZone#getDefault()

                            @defaultMessage Please do not try to stop the world
                            java.lang.System#gc()

                            java.lang.Character#codePointBefore(char[],int) @ Implicit start offset is error-prone when the char[] is a buffer and the first chars are random chars
                            java.lang.Character#codePointAt(char[],int) @ Implicit end offset is error-prone when the char[] is a buffer and the last chars are random chars

                            @defaultMessage Only use wait / notify when really needed try to use concurrency primitives, latches or callbacks instead.
                            java.lang.Object#wait()
                            java.lang.Object#wait(long)
                            java.lang.Object#wait(long,int)
                            java.lang.Object#notify()
                            java.lang.Object#notifyAll()

                            @defaultMessage Beware of the behavior of this method on MIN_VALUE
                            java.lang.Math#abs(int)
                            java.lang.Math#abs(long)

                            @defaultMessage Use Channels.* methods to write to channels. Do not read/write directly.
                            java.nio.channels.WritableByteChannel#write(java.nio.ByteBuffer)
                            java.nio.channels.FileChannel#write(java.nio.ByteBuffer, long)
                            java.nio.channels.GatheringByteChannel#write(java.nio.ByteBuffer[], int, int)
                            java.nio.channels.GatheringByteChannel#write(java.nio.ByteBuffer[])
                            java.nio.channels.ReadableByteChannel#read(java.nio.ByteBuffer)
                            java.nio.channels.ScatteringByteChannel#read(java.nio.ByteBuffer[])
                            java.nio.channels.ScatteringByteChannel#read(java.nio.ByteBuffer[], int, int)
                            java.nio.channels.FileChannel#read(java.nio.ByteBuffer, long)

                            @defaultMessage Convert to URI
                            java.net.URL#getPath()
                            java.net.URL#getFile()

                            @defaultMessage Use java.nio.file instead of java.io.File API
                            # java.util.jar.JarFile
                            # java.util.zip.ZipFile
                            # java.io.File
                            # java.io.FileInputStream
                            # java.io.FileOutputStream
                            java.io.PrintStream#<init>(java.lang.String,java.lang.String)
                            java.io.PrintWriter#<init>(java.lang.String,java.lang.String)
                            java.util.Formatter#<init>(java.lang.String,java.lang.String,java.util.Locale)
                            java.io.RandomAccessFile
                            # java.nio.file.Path#toFile()

                            @defaultMessage Specify a location for the temp file/directory instead.
                            java.nio.file.Files#createTempDirectory(java.lang.String,java.nio.file.attribute.FileAttribute[])
                            java.nio.file.Files#createTempFile(java.lang.String,java.lang.String,java.nio.file.attribute.FileAttribute[])

                            com.google.common.collect.Iterators#emptyIterator() @ Use Collections.emptyIterator instead

                            @defaultMessage Don't use java serialization - this can break BWC without noticing it
                            java.io.ObjectOutputStream
                            java.io.ObjectOutput
                            java.io.ObjectInputStream
                            java.io.ObjectInput

                            @defaultMessage avoid DNS lookups by accident: if you have a valid reason, then use SuppressWarnings with that reason so its completely clear
                            java.net.InetAddress#getHostName()
                            java.net.InetAddress#getCanonicalHostName()

                            java.net.InetSocketAddress#getHostName() @ Use getHostString() instead, which avoids a DNS lookup

                            @defaultMessage Avoid unchecked warnings by using Collections#empty(List|Map|Set) methods
                            java.util.Collections#EMPTY_LIST
                            java.util.Collections#EMPTY_MAP
                            java.util.Collections#EMPTY_SET

                            java.util.Collections#shuffle(java.util.List) @ Use java.util.Collections#shuffle(java.util.List, java.util.Random) with a reproducible source of randomness

                            com.google.common.base.Charsets @ Use java.nio.charset.StandardCharsets

                            @defaultMessage Don't use imports from shaded or denied dependencies
                            joptsimple.internal.**
                            org.testcontainers.shaded.**
                            edu.emory.mathcs.backport.java.util.**
                            org.apache.directory.api.util.**
                            org.apache.groovy.util.**
                            org.apache.logging.log4j.util.Strings
                            org.graylog.shaded.kafka09.joptsimple.**
                            org.assertj.core.util.**
                            org.bouncycastle.util.Strings
                            org.junit.jupiter.params.shadow.**
                            org.apache.http.util.**

                            @defaultMessage Use jakarta.inject.
                            com.google.inject.Inject
                            com.google.inject.Scope
                            com.google.inject.Singleton
                            com.google.inject.Provider
                            com.google.inject.name.Named
                            javax.inject.**

                            javax.persistence.** @ Use jakarta.persistence.

                            @defaultMessage Use jakarta.annotation.
                            javax.annotation.sql.**
                            javax.annotation.security.**
                            javax.annotation.Resources
                            javax.annotation.Resource
                            javax.annotation.Resource$AuthenticationType
                            javax.annotation.ManagedBean
                            javax.annotation.Generated
                            javax.annotation.PreDestroy
                            javax.annotation.Priority
                            javax.annotation.PostConstruct

                            @defaultMessage Use jakarta.validation.
                            javax.validation.**
                        ]]>

                    </signatures>
                </configuration>
                <executions>
                    <execution>
                        <id>forbidden-apis-src</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>forbidden-apis-test</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>testCheck</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <release>17</release>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                    <forceJavacCompilerUse>true</forceJavacCompilerUse>
                    <compilerArgs>
                        <arg>-XDcompilePolicy=simple</arg>
                        <!--
                          We disabled checks that don't apply to us because we either don't use the platform or
                          library. (e.g., Android, Flogger) Disabling those checks improves compile times.
                          See available bug patterns: https://errorprone.info/bugpatterns
                        -->
                        <arg>
                            -Xplugin:ErrorProne
                            -Xep:DoNotMock:WARN
                            -XepDisableWarningsInGeneratedCode
                            -XepExcludedPaths:.*/target/generated-sources/.*
                            -Xep:AndroidInjectionBeforeSuper:OFF
                            -Xep:BugPatternNaming:OFF
                            -Xep:BundleDeserializationCast:OFF
                            -Xep:DaggerProvidesNull:OFF
                            -Xep:FloggerArgumentToString:OFF
                            -Xep:FloggerFormatString:OFF
                            -Xep:FloggerLogString:OFF
                            -Xep:FloggerLogVarargs:OFF
                            -Xep:FloggerLogWithCause:OFF
                            -Xep:FloggerMessageFormat:OFF
                            -Xep:FloggerRedundantIsEnabled:OFF
                            -Xep:FloggerRequiredModifiers:OFF
                            -Xep:FloggerSplitLogStatement:OFF
                            -Xep:FloggerStringConcatenation:OFF
                            -Xep:FloggerWithCause:OFF
                            -Xep:FloggerWithoutCause:OFF
                            -Xep:FragmentInjection:OFF
                            -Xep:FragmentNotInstantiable:OFF
                            -Xep:ICCProfileGetInstance:OFF
                            -Xep:IsLoggableTagLength:OFF
                            -Xep:JUnit3FloatingPointComparisonWithoutDelta:OFF
                            -Xep:JUnit3TestNotRun:OFF
                            -Xep:JUnit4ClassUsedInJUnit3:OFF
                            -Xep:JUnitAmbiguousTestClass:OFF
                            -Xep:MislabeledAndroidString:OFF
                            -Xep:MissingRefasterAnnotation:OFF
                            -Xep:OutlineNone:OFF
                            -Xep:ParcelableCreator:OFF
                            -Xep:RectIntersectReturnValueIgnored:OFF
                            -Xep:RobolectricShadowDirectlyOn:OFF
                            -Xep:StringCaseLocaleUsage:OFF
                            -Xep:SwigMemoryLeak:OFF
                            -Xep:DefaultCharset:ERROR
                            -Xep:DoubleCheckedLocking:ERROR
                            -Xep:InconsistentHashCode:ERROR
                            -Xep:IncrementInForLoopAndHeader:ERROR
                            -Xep:NonAtomicVolatileUpdate:ERROR
                            -Xep:PrimitiveAtomicReference:ERROR
                        </arg>
                    </compilerArgs>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>com.google.errorprone</groupId>
                            <artifactId>error_prone_core</artifactId>
                            <version>${error-prone.version}</version>
                        </path>
                        <path>
                            <groupId>com.google.auto.service</groupId>
                            <artifactId>auto-service</artifactId>
                            <version>${auto-service.version}</version>
                        </path>
                        <path>
                            <groupId>com.google.auto.value</groupId>
                            <artifactId>auto-value</artifactId>
                            <version>${auto-value.version}</version>
                        </path>
                        <path>
                            <groupId>org.graylog.autovalue</groupId>
                            <artifactId>auto-value-javabean</artifactId>
                            <version>${auto-value-javabean.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                    <mavenExecutorId>forked-path</mavenExecutorId>
                    <tagNameFormat>@{project.version}</tagNameFormat>
                    <preparationGoals>clean test</preparationGoals>
                    <releaseProfiles>release-profile,release</releaseProfiles>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <attach>true</attach>
                    <appendAssemblyId>false</appendAssemblyId>
                    <!-- we don't care about assembling the parent, just run the goal on the project, pretty please -->
                    <ignoreMissingDescriptor>true</ignoreMissingDescriptor>
                    <tarLongFileMode>posix</tarLongFileMode>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.graylog.repackaged</groupId>
                <artifactId>download-maven-plugin</artifactId>
                <version>${download-maven-plugin.version}</version>
                <configuration>
                    <!-- Avoid metadata problems with the cache directory of older plugin versions. Bump the rev when updating the download-maven-plugin. -->
                    <cacheDirectory>${settings.localRepository}/.cache/download-maven-plugin-rev1</cacheDirectory>
                    <followRedirects>true</followRedirects>
                    <retries>5</retries>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.mycila</groupId>
                <artifactId>license-maven-plugin</artifactId>
                <configuration>
                    <aggregate>false</aggregate>
                    <mapping>
                        <java>SLASHSTAR_STYLE</java>
                        <jsx>SLASHSTAR_STYLE</jsx>
                        <ts>SLASHSTAR_STYLE</ts>
                        <tsx>SLASHSTAR_STYLE</tsx>
                    </mapping>
                    <licenseSets>
                        <licenseSet>
                            <header>com/mycila/maven/plugin/license/templates/SSPL-1.txt</header>
                            <properties>
                                <year>2020</year>
                                <owner>Graylog, Inc.</owner>
                            </properties>
                            <keywords>
                                <keyword>Server Side Public License for more details</keyword>
                            </keywords>
                            <includes>
                                <include>**/src/main/java/**</include>
                                <include>**/src/test/java/**</include>
                                <include>**/pom.xml</include>

                                <include>*.js</include>
                                <include>src/web/**/*.js</include>
                                <include>src/web/**/*.jsx</include>
                                <include>src/web/**/*.ts</include>
                                <include>src/web/**/*.tsx</include>
                                <include>graylog2-web-interface/*.js</include>
                                <include>graylog2-web-interface/*.ts</include>
                                <include>graylog2-web-interface/config/**/*.js</include>
                                <include>graylog2-web-interface/config/**/*.ts</include>
                                <include>graylog2-web-interface/packages/**/*.js</include>
                                <include>graylog2-web-interface/packages/**/*.jsx</include>
                                <include>graylog2-web-interface/packages/**/*.ts</include>
                                <include>graylog2-web-interface/packages/**/*.tsx</include>
                                <include>graylog2-web-interface/src/**/*.js</include>
                                <include>graylog2-web-interface/src/**/*.jsx</include>
                                <include>graylog2-web-interface/src/**/*.ts</include>
                                <include>graylog2-web-interface/src/**/*.tsx</include>
                                <include>graylog2-web-interface/test/**/*.js</include>
                                <include>graylog2-web-interface/test/**/*.jsx</include>
                                <include>graylog2-web-interface/test/**/*.ts</include>
                                <include>graylog2-web-interface/test/**/*.tsx</include>
                                <include>graylog2-web-interface/webpack/**/*.js</include>
                                <include>graylog2-web-interface/webpack/**/*.ts</include>
                            </includes>
                            <excludes>
                                <exclude>**/resources/swagger/**</exclude>
                            </excludes>
                        </licenseSet>
                    </licenseSets>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>datanode</id>
            <activation>
                <property>
                    <name>!skip.datanode</name>
                </property>
            </activation>
            <modules>
                <module>data-node</module>
            </modules>
        </profile>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <configuration>
                            <keyname>B1606F22</keyname>
                        </configuration>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-release-plugin</artifactId>
                        <configuration>
                            <goals>deploy</goals>
                        </configuration>
                    </plugin>
                    <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-deploy-plugin</artifactId>
                      <configuration>
                        <retryFailedDeploymentCount>5</retryFailedDeploymentCount>
                      </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
