AuthMe/AuthMeReloaded

View on GitHub
pom.xml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         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>fr.xephi</groupId>
    <artifactId>authme</artifactId>
    <version>5.7.0-SNAPSHOT</version>

    <name>AuthMeReloaded</name>
    <description>The first authentication plugin for the Bukkit API!</description>
    <inceptionYear>2013</inceptionYear>
    <url>https://github.com/AuthMe/AuthMeReloaded</url>

    <organization>
        <name>AuthMe-Team</name>
        <url>https://github.com/AuthMe</url>
    </organization>

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

    <ciManagement>
        <system>jenkins</system>
        <url>https://ci.codemc.io/job/AuthMe/job/AuthMeReloaded/</url>
    </ciManagement>

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

    <distributionManagement>
        <snapshotRepository>
            <id>codemc-snapshots</id>
            <url>https://repo.codemc.io/repository/maven-snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>codemc-releases</id>
            <url>https://repo.codemc.io/repository/maven-releases/</url>
        </repository>
    </distributionManagement>

    <licenses>
        <license>
            <name>The GNU General Public Licence version 3 (GPLv3)</name>
            <url>https://www.gnu.org/licenses/gpl-3.0.html</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <properties>
        <!-- Build cycle properties -->
        <project.skipExtendedHashTests>false</project.skipExtendedHashTests>

        <!-- Environment properties -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.source>17</java.source>
        <java.target>17</java.target>
        <java.apiVersion>17</java.apiVersion>
        <java.compiler.minimumVersion>17</java.compiler.minimumVersion>
        <maven.minimumVersion>3.8.8</maven.minimumVersion>

        <!-- Versioning properties -->
        <project.outputName>AuthMe</project.outputName>
        <project.buildNumber>CUSTOM</project.buildNumber>
        <project.versionCode>${project.version}-b${project.buildNumber}</project.versionCode>
        <project.finalNameBase>${project.outputName}-${project.version}</project.finalNameBase>

        <!-- Plugin description file properties -->
        <pluginDescription.name>${project.outputName}</pluginDescription.name>
        <pluginDescription.version>${project.versionCode}</pluginDescription.version>
        <pluginDescription.main>${project.groupId}.${project.artifactId}.${pluginDescription.name}</pluginDescription.main>
        <pluginDescription.authors>sgdc3, games647, Hex3l, krusic22</pluginDescription.authors>

        <!-- Java libraries -->
        <dependencies.injector.version>1.0</dependencies.injector.version>
        <dependencies.string-similarity.version>1.0.0</dependencies.string-similarity.version>
        <dependencies.geoip2.version>4.2.0</dependencies.geoip2.version>
        <dependencies.javatar.version>2.5</dependencies.javatar.version>
        <dependencies.commons-email.version>1.6.0</dependencies.commons-email.version>
        <dependencies.hikaricp.version>5.1.0</dependencies.hikaricp.version>
        <dependencies.slf4j.version>2.0.13</dependencies.slf4j.version>
        <dependencies.datasourcecolumns.version>0.1.2</dependencies.datasourcecolumns.version>
        <dependencies.mysql-connector-j.version>8.4.0</dependencies.mysql-connector-j.version>
        <dependencies.mariadb-java-client.version>3.4.0</dependencies.mariadb-java-client.version>
        <dependencies.postgresql.version>42.7.3</dependencies.postgresql.version>
        <dependencies.pbkdf2.version>1.1.4</dependencies.pbkdf2.version>
        <dependencies.argon2-jvm-nolibs.version>2.11</dependencies.argon2-jvm-nolibs.version>
        <dependencies.bcrypt.version>0.10.2</dependencies.bcrypt.version>
        <dependencies.googleauth.version>1.5.0</dependencies.googleauth.version>
        <dependencies.configme.version>1.3.1</dependencies.configme.version>
        <!-- Spigot -->
        <dependencies.spigot.version>1.16.5-R0.1-SNAPSHOT</dependencies.spigot.version>
        <dependencies.log4j-core.version>2.8.1</dependencies.log4j-core.version> <!-- version bundled 1.16.5 -->
        <!-- Spigot libraries -->
        <dependencies.bstats.version>3.0.2</dependencies.bstats.version>
    </properties>

    <!-- Jenkins profile -->
    <profiles>
        <!-- Set the buildNumber using the jenkins env. variable -->
        <profile>
            <id>jenkins</id>
            <activation>
                <property>
                    <name>env.BUILD_NUMBER</name>
                </property>
            </activation>
            <properties>
                <project.buildNumber>${env.BUILD_NUMBER}</project.buildNumber>
            </properties>
        </profile>
        <!-- Skip long hash tests, reduce the test time of 20-30 seconds -->
        <profile>
            <id>skipLongHashTests</id>
            <activation>
                <property>
                    <name>skipLongHashTests</name>
                </property>
            </activation>
            <properties>
                <project.skipExtendedHashTests>true</project.skipExtendedHashTests>
            </properties>
        </profile>
        <!-- Skip javadoc generation for faster local build -->
        <profile>
            <id>skipJavadocGeneration</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <build>
        <defaultGoal>clean package</defaultGoal>
        <!-- Little hack to make the shade plugin output a file with the right name
        Disable, we aren't using shading atm
        <finalName>${project.finalNameBase}-noshade</finalName>
        -->

        <resources>
            <resource>
                <directory>.</directory>
                <filtering>false</filtering>
                <includes>
                    <include>LICENSE</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources/</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources/messages/</directory>
                <targetPath>./messages/</targetPath>
                <filtering>false</filtering>
            </resource>
        </resources>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>3.7.0</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <!-- Enforce build environment -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>3.5.0</version>
                <executions>
                    <execution>
                        <id>enforce-environment</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <version>${maven.minimumVersion}</version>
                                </requireMavenVersion>
                                <requireJavaVersion>
                                    <version>[${java.compiler.minimumVersion},)</version>
                                </requireJavaVersion>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Clean the target folder content -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.4.0</version>
            </plugin>
            <!-- Include resource files -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.3.1</version>
            </plugin>
            <!-- Compile and include classes -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
                <configuration>
                    <source>${java.source}</source>
                    <target>${java.target}</target>
                    <release>${java.apiVersion}</release>
                </configuration>
            </plugin>
            <!-- Generate test coverage reports -->
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.12</version>
                <configuration>
                    <includes>
                        <include>fr/xephi/authme/*</include>
                        <include>fr/xephi/authme/**/*</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <id>pre-unit-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- Unit testing -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <!-- Fix java.base opens for new JDK versions -->
                    <!-- Force the right file encoding during unit testing -->
                    <!-- Set language to English in order to get consistent results for localized time formatting -->
                    <argLine>--add-opens=java.base/java.lang=ALL-UNNAMED -Dfile.encoding=${project.build.sourceEncoding} -Duser.language=en @{argLine}</argLine>
                    <systemPropertyVariables>
                        <project.skipExtendedHashTests>${project.skipExtendedHashTests}</project.skipExtendedHashTests>
                    </systemPropertyVariables>
                    <!-- Don't trim stack traces -->
                    <trimStackTrace>false</trimStackTrace>
                </configuration>
            </plugin>
            <!-- Generate a jar containing classes and resources -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.4.2</version>
            </plugin>
            <!-- Generate a jar containing the source javadoc -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <finalName>${project.finalNameBase}</finalName>
                    <!-- In sync with the source/target properties of the maven-compiler-plugin -->
                    <source>${java.source}</source>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadoc</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- Generate a jar containing the java sources -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.3.1</version>
                <configuration>
                    <finalName>${project.finalNameBase}</finalName>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- Generate a jar containing classes, resources and shaded libraries -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.6.0</version>
                <executions>
                    <!-- Disable, we aren't using shading atm
                    <execution>
                        <id>shaded-jar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                    -->
                </executions>
                <configuration>
                    <!-- Don't create the reduced pom file, as we don't deploy the shaded jar -->
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                    <!-- Deploy the non shaded jar as main artifact -->
                    <shadedArtifactAttached>true</shadedArtifactAttached>
                    <!-- Use the base jar name, to help server owners download the right jar -->
                    <finalName>${project.finalNameBase}</finalName>

                    <!-- Disable, no relocations atm
                    <relocations>
                        <relocation>
                            <pattern></pattern>
                            <shadedPattern>fr.xephi.authme.libs.</shadedPattern>
                        </relocation>
                    </relocations>
                    -->

                    <filters>
                        <!-- Ignore manifest signatures for shading the project into an uber-jar to fix -->
                        <!-- "Invalid signature file digest for Manifest main attributes" -->
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                                <exclude>META-INF/*.MF</exclude>
                                <exclude>META-INF/DEPENDENCIES</exclude>
                                <exclude>META-INF/**/module-info.class</exclude>
                            </excludes>
                        </filter>
                    </filters>

                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer"/>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
                            <addHeader>false</addHeader>
                        </transformer>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                    </transformers>
                </configuration>
            </plugin>
            <!-- Install the jars as artifacts into the local repository -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>3.1.2</version>
            </plugin>
            <!-- Deploy the jars as artifacts into the remote repository -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>3.1.2</version>
            </plugin>
            <!-- Handle documentation generation, required by other plugins -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.12.1</version>
            </plugin>
            <!-- Publish coveralls test coverage reports, not included in the build cycle by default -->
            <plugin>
                <groupId>org.eluder.coveralls</groupId>
                <artifactId>coveralls-maven-plugin</artifactId>
                <version>4.3.0</version>
                <configuration>
                    <!-- The secret token is provided with a command-line parameter -->
                    <failOnServiceError>false</failOnServiceError>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.3.1</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <!-- Apache snapshots repo -->
        <repository>
            <id>apache-snapshots</id>
            <url>https://repository.apache.org/content/repositories/snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>

        <!-- SpigotAPI Repo -->
        <repository>
            <id>spigotmc-repo</id>
            <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>

        <!-- CodeMC Repo (Contains many required libraries) -->
        <repository>
            <id>codemc-repo</id>
            <url>https://repo.codemc.io/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>

        <!-- EssentialsX Repo -->
        <repository>
            <id>essentialsx-repo</id>
            <url>https://repo.essentialsx.net/releases/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>

        <!-- ProtocolLib Repo -->
        <repository>
            <id>dmulloy2-repo-releases</id>
            <url>https://repo.dmulloy2.net/nexus/repository/releases/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>dmulloy2-repo-snapshots</id>
            <url>https://repo.dmulloy2.net/nexus/repository/snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>

        <!-- Multiverse Repo -->
        <repository>
            <id>onarandombox-repo-releases</id>
            <url>https://repo.onarandombox.com/content/repositories/multiverse/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>onarandombox-repo-snapshots</id>
            <url>https://repo.onarandombox.com/content/repositories/multiverse-snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <!-- Java Libraries -->

        <!-- Jalu Injector -->
        <dependency>
            <groupId>ch.jalu</groupId>
            <artifactId>injector</artifactId>
            <version>${dependencies.injector.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- String comparison library. Used for dynamic help system. -->
        <dependency>
            <groupId>net.ricecode</groupId>
            <artifactId>string-similarity</artifactId>
            <version>${dependencies.string-similarity.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- MaxMind GEO IP -->
        <dependency>
            <groupId>com.maxmind.geoip2</groupId>
            <artifactId>geoip2</artifactId>
            <version>${dependencies.geoip2.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Library for tar archives -->
        <dependency>
            <groupId>javatar</groupId>
            <artifactId>javatar</artifactId>
            <version>${dependencies.javatar.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Java Email Library -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>${dependencies.commons-email.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Database Connection Pool -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>${dependencies.hikaricp.version}</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${dependencies.slf4j.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Data source columns -->
        <dependency>
            <groupId>ch.jalu</groupId>
            <artifactId>datasourcecolumns</artifactId>
            <version>${dependencies.datasourcecolumns.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- MySQL connector -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>${dependencies.mysql-connector-j.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- MariaDB connector -->
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>${dependencies.mariadb-java-client.version}</version>
            <scope>provided</scope>
            <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>

        <!-- PostgreSQL -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>${dependencies.postgresql.version}</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.checkerframework</groupId>
                    <artifactId>checker-qual</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- PBKDF2 implementation -->
        <dependency>
            <groupId>de.rtner</groupId>
            <artifactId>PBKDF2</artifactId>
            <version>${dependencies.pbkdf2.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Argon2 implementation -->
        <dependency>
            <groupId>de.mkammerer</groupId>
            <artifactId>argon2-jvm-nolibs</artifactId>
            <version>${dependencies.argon2-jvm-nolibs.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- BCrypt implementation -->
        <dependency>
            <groupId>at.favre.lib</groupId>
            <artifactId>bcrypt</artifactId>
            <version>${dependencies.bcrypt.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- TOTP client -->
        <dependency>
            <groupId>com.warrenstrange</groupId>
            <artifactId>googleauth</artifactId>
            <version>${dependencies.googleauth.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- ConfigMe -->
        <dependency>
            <groupId>ch.jalu</groupId>
            <artifactId>configme</artifactId>
            <version>${dependencies.configme.version}</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.yaml</groupId>
                    <artifactId>snakeyaml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Spigot API, https://www.spigotmc.org/ -->
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>${dependencies.spigot.version}</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.joml</groupId>
                    <artifactId>joml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>net.md-5</groupId>
                    <artifactId>bungeecord-chat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${dependencies.log4j-core.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Bukkit Libraries  -->

        <!-- bStats metrics -->
        <dependency>
            <groupId>org.bstats</groupId>
            <artifactId>bstats-bukkit</artifactId>
            <version>${dependencies.bstats.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Plugin Hooks -->

        <!-- ProtocolLib -->
        <dependency>
            <groupId>com.comphenix.protocol</groupId>
            <artifactId>ProtocolLib</artifactId>
            <version>5.1.0</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <artifactId>cglib-nodep</artifactId>
                    <groupId>cglib</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>BukkitExecutors</artifactId>
                    <groupId>com.comphenix.executors</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>byte-buddy</artifactId>
                    <groupId>net.bytebuddy</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- LuckPerms plugin -->
        <dependency>
            <groupId>net.luckperms</groupId>
            <artifactId>api</artifactId>
            <version>5.4</version>
            <scope>provided</scope>
        </dependency>

        <!-- PermissionsEx plugin -->
        <dependency>
            <groupId>ru.tehkode</groupId>
            <artifactId>PermissionsEx</artifactId>
            <version>1.23.5-SNAPSHOT</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <artifactId>commons-dbcp</artifactId>
                    <groupId>commons-dbcp</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>accounts-client</artifactId>
                    <groupId>com.mojang</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- zPermissions plugin -->
        <dependency>
            <groupId>org.tyrannyofheaven.bukkit</groupId>
            <artifactId>zPermissions</artifactId>
            <version>1.4.3-SNAPSHOT</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.avaje</groupId>
                    <artifactId>ebean</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Vault, https://dev.bukkit.org/bukkit-plugins/vault/ -->
        <dependency>
            <groupId>net.milkbowl.vault</groupId>
            <artifactId>VaultAPI</artifactId>
            <version>1.7</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.bukkit</groupId>
                    <artifactId>bukkit</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.bukkit</groupId>
                    <artifactId>craftbukkit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Multi World plugin, https://www.spigotmc.org/resources/multiverse-core.390/ -->
        <dependency>
            <groupId>com.onarandombox.multiversecore</groupId>
            <artifactId>Multiverse-Core</artifactId>
            <version>4.3.1</version>
            <type>jar</type>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.bukkit</groupId>
                    <artifactId>bukkit</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.bukkit</groupId>
                    <artifactId>craftbukkit</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>AllPay</artifactId>
                    <groupId>com.fernferret.allpay</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>Vault</artifactId>
                    <groupId>net.milkbowl.vault</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>VaultAPI</artifactId>
                    <groupId>net.milkbowl.vault</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>CommandHandler</artifactId>
                    <groupId>com.pneumaticraft.commandhandler</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>SerializationConfig</artifactId>
                    <groupId>me.main__.util</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>Logging</artifactId>
                    <groupId>com.dumptruckman.minecraft</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>metrics</artifactId>
                    <groupId>org.mcstats.bukkit</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>buscript</artifactId>
                    <groupId>com.dumptruckman.minecraft</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>junit</artifactId>
                    <groupId>junit</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spigot-api</artifactId>
                    <groupId>org.spigotmc</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jettison</artifactId>
                    <groupId>org.codehaus.jettison</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- EssentialsX plugin -->
        <dependency>
            <groupId>net.essentialsx</groupId>
            <artifactId>EssentialsX</artifactId>
            <version>2.20.1</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>io.papermc</groupId>
                    <artifactId>paperlib</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.bstats</groupId>
                    <artifactId>bstats-bukkit</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>net.essentialsx</groupId>
                    <artifactId>BaseProviders</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>net.essentialsx</groupId>
                    <artifactId>PaperProvider</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>net.essentialsx</groupId>
                    <artifactId>NMSReflectionProvider</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>net.essentialsx</groupId>
                    <artifactId>1_8Provider</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>net.essentialsx</groupId>
                    <artifactId>1_12Provider</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.spigotmc</groupId>
                    <artifactId>spigot-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.spongepowered</groupId>
                    <artifactId>configurate-yaml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.checkerframework</groupId>
                    <artifactId>checker-qual</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- XAuth, another authentication plugin, required by the database converter -->
        <dependency>
            <groupId>de.luricos.bukkit</groupId>
            <artifactId>xAuth</artifactId>
            <version>2.6.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>

        <!-- Unit Testing Libraries -->

        <!-- TODO: update to junit 5 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
            <version>4.13.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.hamcrest</groupId>
                    <artifactId>hamcrest-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest</artifactId>
            <scope>test</scope>
            <version>2.2</version>
        </dependency>

        <!-- TODO: update to mockito 5 -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
            <version>4.11.0</version>
        </dependency>

        <!-- Required to mock the LuckPerms API-->
        <dependency>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-qual</artifactId>
            <version>3.44.0</version>
            <scope>test</scope>
        </dependency>

        <!-- JDBC drivers for datasource integration tests -->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.46.0.0</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>2.2.224</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>