<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.dspace</groupId>
    <artifactId>dspace-parent</artifactId>
    <packaging>pom</packaging>
    <version>8.1</version>
    <name>DSpace Parent Project</name>
    <description>
   	DSpace open source software is a turnkey institutional repository application.
    </description>
    <url>https://github.com/DSpace/DSpace</url>

    <organization>
        <name>LYRASIS</name>
        <url>https://dspace.org</url>
    </organization>

    <properties>
        <!--=== GENERAL / DSPACE-API DEPENDENCIES ===-->
        <java.version>17</java.version>
        <spring.version>6.2.2</spring.version>
        <spring-boot.version>3.4.2</spring-boot.version>
        <spring-security.version>6.4.2</spring-security.version> <!-- sync with version used by spring-boot-->
        <hibernate.version>6.4.8.Final</hibernate.version>
        <hibernate-validator.version>8.0.1.Final</hibernate-validator.version>
        <postgresql.driver.version>42.7.5</postgresql.driver.version>
        <flyway.version>10.22.0</flyway.version>
        <solr.client.version>8.11.4</solr.client.version>

        <ehcache.version>3.10.8</ehcache.version>
        <errorprone.version>2.36.0</errorprone.version>
        <!-- NOTE: when updating jackson.version, also sync jackson-databind.version below -->
        <jackson.version>2.18.2</jackson.version>
        <jackson-databind.version>2.18.2</jackson-databind.version>
        <jakarta-annotation.version>2.1.1</jakarta-annotation.version>
        <jaxb-api.version>4.0.2</jaxb-api.version>
        <jaxb-runtime.version>4.0.5</jaxb-runtime.version>
        <jcache-version>1.1.1</jcache-version>
        <!-- NOTE: Jetty needed for Solr, Handle Server & tests -->
        <jetty.version>9.4.57.v20241219</jetty.version>
        <log4j.version>2.24.3</log4j.version>
        <pdfbox-version>2.0.33</pdfbox-version>
        <rome.version>1.19.0</rome.version>
        <slf4j.version>2.0.16</slf4j.version>
        <tika.version>2.9.2</tika.version>
        <!-- Sync BouncyCastle & ASM with whatever version Tika uses -->
        <bouncycastle.version>1.80</bouncycastle.version>
        <asm.version>8.0.1</asm.version>
        <!-- Jersey is used to integrate with external sources/services -->
        <jersey.version>3.1.10</jersey.version>
        <!--=== SERVER WEBAPP DEPENDENCIES ===-->
        <!-- Library for reading JSON documents: https://github.com/json-path/JsonPath (used by Server webapp) -->
        <json-path.version>2.9.0</json-path.version>
        <!-- Library for managing JSON Web Tokens (JWT): https://bitbucket.org/connect2id/nimbus-jose-jwt/wiki/Home
             (used by Server webapp) -->
        <nimbus-jose-jwt.version>9.48</nimbus-jose-jwt.version>

        <!--=== OTHER MODULE-SPECIFIC DEPENDENCIES ===-->
        <!-- Jena is used by both RDF and SWORDv2 -->
        <jena.version>4.10.0</jena.version>

        <!--=== MAVEN SETTINGS ===-->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>

        <!--=== TEST SETTINGS (CUSTOM) ===-->
        <!-- By default skip running all tests.
             NOTE: Tests are always built, because we have modules that depend on common test infrastructure.
             * Run all tests : 'mvn install -DskipUnitTests=false -DskipIntegrationTests=false'
             * Run unit tests ONLY: 'mvn install -DskipUnitTests=false'
             * Run integration tests ONLY: `mvn install -DskipIntegrationTests=false'
        -->
        <skipUnitTests>true</skipUnitTests>
        <skipIntegrationTests>true</skipIntegrationTests>

        <!-- 'root.basedir' is the path to the root [dspace-src] dir. It must be redefined by each child POM,
                     as it is used to reference the LICENSE.header and *.properties file(s) in that directory. -->
        <root.basedir>${basedir}</root.basedir>
    </properties>

    <build>
        <!-- Define Maven Plugin Settings that should be inherited to ALL submodule POMs.
             (NOTE: individual POMs can override specific settings). -->
        <pluginManagement>
            <plugins>
                <!-- Use to enforce particular versions of Java and Maven,
                     and to ensure no conflicting dependencies -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>3.5.0</version>
                    <executions>
                        <execution>
                            <id>enforce-java</id>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                            <configuration>
                                <rules>
                                    <requireJavaVersion>
                                        <version>${java.version}</version>
                                    </requireJavaVersion>
                                    <requireMavenVersion>
                                        <version>[3.8,)</version>
                                    </requireMavenVersion>
                                </rules>
                            </configuration>
                        </execution>
                        <!-- Make sure that we do not have conflicting dependencies-->
                        <execution>
                            <id>enforce-versions</id>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                            <configuration>
                                <rules>
                                    <DependencyConvergence />
                                </rules>
                            </configuration>
                        </execution>
                        <execution>
                            <id>ban-dependencies</id>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                            <configuration>
                                <rules>
                                    <bannedDependencies>
                                        <excludes>
                                            <exclude>log4j:log4j</exclude>
                                        </excludes>
                                    </bannedDependencies>
                                </rules>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <!-- Used to compile all Java classes -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.13.0</version>
                    <configuration>
                        <release>${java.version}</release>
                        <!-- Turn on http://errorprone.info (requires fork=true & below compilerArgs)-->
                        <fork>true</fork>
                        <compilerArgs>
                            <arg>-XDcompilePolicy=simple</arg>
                            <arg>--should-stop=ifError=FLOW</arg>
                            <arg>-Xplugin:ErrorProne</arg>
                            <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
                            <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                            <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                            <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                            <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                            <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                            <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                            <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
                            <arg>-Xpkginfo:always</arg>
                            <!-- Allows for the Reflection API to retrieve parameter names from methods. For example,
                                 it enables @PathVariable annotations to use parameter names automatically. -->
                            <arg>-parameters</arg>
                        </compilerArgs>
                        <annotationProcessorPaths>
                            <path>
                                <groupId>com.google.errorprone</groupId>
                                <artifactId>error_prone_core</artifactId>
                                <version>${errorprone.version}</version>
                            </path>
                        </annotationProcessorPaths>
                    </configuration>
                </plugin>
                <!-- Used to package all DSpace JARs -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.4.2</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
                <!-- Used to package all DSpace WARs -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.4.0</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                        <!-- Filter the web.xml (needed for IDE compatibility/debugging) -->
                        <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
                <!-- Used to run Unit tests (when enabled by -DskipUnitTests=false) -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.5.2</version>
                    <configuration>
                        <!-- Allow for the ability to pass JVM memory flags for Unit Tests. Since
                             maven-surefire-plugin forks a new JVM, it ignores MAVEN_OPTS.-->
                        <argLine>${test.argLine} ${surefireJacoco}</argLine>
                        <!-- tests whose name starts by Abstract will be ignored -->
                        <excludes>
                            <exclude>**/Abstract*</exclude>
                        </excludes>
                        <!-- Detailed logs in surefire-reports/testName-output.txt instead of stdout -->
                        <redirectTestOutputToFile>true</redirectTestOutputToFile>
                        <!-- Ensure full stacktrace is logged (when errors occur) -->
                        <trimStackTrace>false</trimStackTrace>
                        <!-- Whether to skip unit tests or not -->
                        <skipTests>${skipUnitTests}</skipTests>
                        <!-- Do not fail immediately if a test specified via "-Dtest=[testClass]" isn't found.
                             This allows the build to continue and keep trying to run that test in other modules. -->
                        <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
                        <!--
                        Enable to debug Maven Surefire tests in remote proces
                        <debugForkedProcess>true</debugForkedProcess>
                        -->
                    </configuration>
                </plugin>
                <!-- Used to run Integration tests (when enabled by -DskipIntegrationTests=false) -->
                <plugin>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>3.5.2</version>
                    <configuration>
                        <!-- Allow for the ability to pass JVM memory flags for Unit Tests. Since
                             maven-failsafe-plugin forks a new JVM, it ignores MAVEN_OPTS.-->
                        <argLine>${test.argLine} ${failsafeJacoco}</argLine>
                        <excludes>
                            <exclude>**/Abstract*</exclude>
                        </excludes>
                         <!-- Detailed logs in failsafe-reports/testName-output.txt instead of stdout -->
                        <redirectTestOutputToFile>true</redirectTestOutputToFile>
                        <!-- Ensure full stacktrace is logged (when errors occur) -->
                        <trimStackTrace>false</trimStackTrace>
                        <!-- Whether to skip integration tests or not -->
                        <skipTests>${skipIntegrationTests}</skipTests>
                        <!-- Do not fail immediately if a test specified via "-Dit.test=[testClass]" isn't found.
                             This allows the build to continue and keep trying to run that test in other modules. -->
                        <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- Used to validate all code style rules in source code via the Checkstyle config in checkstyle.xml -->
                <!-- Can be skipped by passing -Dcheckstyle.skip=true to Maven. -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>3.6.0</version>
                    <executions>
                        <execution>
                            <id>verify-style</id>
                            <!-- Bind to verify so it runs after package & unit tests, but before install -->
                            <phase>verify</phase>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <sourceDirectories>
                            <sourceDirectory>src/main/java</sourceDirectory>
                        </sourceDirectories>
                        <configLocation>${root.basedir}/checkstyle.xml</configLocation>
                        <logViolationsToConsole>true</logViolationsToConsole>
                        <failOnViolation>true</failOnViolation>
                        <!-- Enable checks on all test source files -->
                        <includeTestSourceDirectory>true</includeTestSourceDirectory>
                        <!-- Define our suppressions file location, and the key used to pass it to checkstyle.xml-->
                        <suppressionsLocation>${root.basedir}/checkstyle-suppressions.xml</suppressionsLocation>
                        <suppressionsFileExpression>checkstyle.suppressions.file</suppressionsFileExpression>
                    </configuration>
                    <dependencies>
                        <!-- Override dependencies to use latest version of checkstyle -->
                        <dependency>
                            <groupId>com.puppycrawl.tools</groupId>
                            <artifactId>checkstyle</artifactId>
                            <version>8.45.1</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>com.github.spotbugs</groupId>
                    <artifactId>spotbugs-maven-plugin</artifactId>
                    <version>4.8.6.6</version>
                    <configuration>
                        <effort>Max</effort>
                        <threshold>Low</threshold>
                        <xmlOutput>true</xmlOutput>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.github.spotbugs</groupId>
                            <artifactId>spotbugs</artifactId>
                            <version>4.9.0</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <phase>compile</phase>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- Used to clean all 'target' directories from parent project -->
                <!-- This additional configuration also cleans sub-modules -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.4.0</version>
                    <configuration>
                        <filesets>
                            <fileset>
                                <directory>dspace/modules</directory>
                                <includes>
                                    <include>**/target</include>
                                </includes>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>3.8.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.3.1</version>
                </plugin>
                <!-- Used to validate License Headers (see build process) -->
                <plugin>
                    <groupId>com.mycila</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>3.0</version>
                </plugin>
                <!-- Used to generate a new release via Sonatype (see release profile). -->
                <plugin>
                    <groupId>org.sonatype.plugins</groupId>
                    <artifactId>nexus-staging-maven-plugin</artifactId>
                    <version>1.7.0</version>
                </plugin>
                <!-- Used to generate JavaDocs for new releases (see release profile). -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>3.11.2</version>
                    <configuration>
                        <!-- Never fail a build based on Javadoc errors -->
                        <failOnError>false</failOnError>
                        <detectLinks />
                        <links>
                          <link>https://docs.spring.io/spring-framework/docs/current/javadoc-api/</link>
                          <link>https://docs.spring.io/spring-security/site/docs/current/api/</link>
                        </links>
                    </configuration>
                </plugin>
                <!-- Used to generate source JARs for new releases (see release profile). -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>3.3.1</version>
                </plugin>
                <!-- Used for custom Groovy code that fills out the 'agnostic.build.dir' needed to
                     set 'dspace.dir' for our testing environment -->
                <plugin>
                    <groupId>org.codehaus.gmaven</groupId>
                    <artifactId>groovy-maven-plugin</artifactId>
                    <version>2.1.1</version>
                </plugin>
                <!-- Used to sign new releases via GPG (see release profile). -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>3.2.7</version>
                </plugin>
                <!-- Used for code coverage reporting (see 'measure-test-coverage' profile) -->
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.8.12</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <!-- These plugin settings only apply to this single POM and are not inherited
            to any submodules. -->
        <plugins>
            <!-- Specify our settings for new releases via 'mvn release:*' -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <!-- During release:prepare and release:perform, pass the "release" property to enable the
                     "release" profile (and enable/disable other profiles based on whether they need releasing) -->
                    <arguments>-Drelease</arguments>
                    <goals>deploy</goals>
                    <!-- Suggest tagging the release in SCM as "dspace-[version]" -->
                    <tagNameFormat>dspace-@{project.version}</tagNameFormat>
                    <!-- Auto-Version all modules the same as the parent module -->
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                </configuration>
            </plugin>
            <!-- Check license headers in all files using LICENSE.header template -->
            <plugin>
                <groupId>com.mycila</groupId>
                <artifactId>license-maven-plugin</artifactId>
                <configuration>
                    <!-- License header file (can be a URL, but that's less stable if external site is down on occasion) -->
                    <header>${root.basedir}/LICENSE.header</header>
                    <!--Just check headers of everything in the /src directory -->
                    <includes>
                        <include>src/**</include>
                    </includes>
                    <!--Use all default exclusions for IDE files & Maven files, see:
                        http://mycila.mathieu.photography/license-maven-plugin/ -->
                    <useDefaultExcludes>true</useDefaultExcludes>
                    <!-- Add some default DSpace exclusions not covered by <useDefaultExcludes>
                         Individual Maven projects may choose to override these defaults. -->
                    <excludes>
						<!-- temporary copy of a modified apache commons-configuration2 class, see https://issues.apache.org/jira/browse/CONFIGURATION-846 -->
                        <exclude>**/src/main/java/org/dspace/servicemanager/config/DSpaceConfigurationPropertySource.java</exclude>
                        <exclude>**/src/test/resources/**</exclude>
                        <exclude>**/src/test/data/**</exclude>
                        <exclude>**/src/main/license/**</exclude>
                        <exclude>**/META-INF/**</exclude>
                        <exclude>**/robots.txt</exclude>
                        <exclude>**/LICENSE*</exclude>
                        <exclude>**/README*</exclude>
                        <exclude>**/readme*</exclude>
                        <exclude>**/.gitignore</exclude>
                        <exclude>**/*.cfg</exclude>
                        <exclude>**/*.conf</exclude>
                    </excludes>
                    <mapping>
                        <!-- Custom DSpace file extensions which are not recognized by license-maven-plugin:
                             *.ttl (used by RDF), *.ts (used in Docker Compose for UI) -->
                        <ttl>SCRIPT_STYLE</ttl>
                        <ts>JAVADOC_STYLE</ts>
                    </mapping>
                    <encoding>UTF-8</encoding>
                    <!-- maven-license-plugin recommends a strict check (e.g. check spaces/tabs too) -->
                    <strictCheck>true</strictCheck>
                </configuration>
                <executions>
                    <execution>
                        <id>check-headers</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Validate all XML formatted files in the project (including submodules) -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>xml-maven-plugin</artifactId>
                <version>1.1.0</version>
                <executions>
                    <execution>
                        <id>validate-ALL-xml-and-xsl</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>validate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <validationSets>
                        <!-- validate ALL XML and XSL files throughout the project (excluding target dirs) -->
                        <validationSet>
                            <dir>${root.basedir}</dir>
                            <includes>
                                <include>**/*.xml</include>
                                <include>**/*.xsl</include>
                                <include>**/*.xsd</include>
                            </includes>
                            <excludes>
                                <exclude>**/target/**</exclude>
                            </excludes>
                        </validationSet>
                    </validationSets>
                </configuration>
            </plugin>

            <!-- Enforce our version of Java, Maven, dependencies, etc. -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
            </plugin>

            <!-- Enforce our code style via CheckStyle (see settings above) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <!-- Allow for passing extra memory to Unit/Integration tests.
             By default this gives unit tests 1GB of memory max (when tests are enabled),
             unless tweaked on commandline (e.g. "-Dtest.argLine=-Xmx512m"). Since
             m-surefire-p and m-failsafe-p both fork a new JVM for testing, they ignores MAVEN_OPTS. -->
        <profile>
            <id>test-argLine</id>
            <activation>
                <property>
                    <name>!test.argLine</name>
                </property>
            </activation>
            <properties>
                <test.argLine>-Xmx1024m</test.argLine>
            </properties>
        </profile>

        <!-- This profile ensures that we generate the Unit Test Environment, whenever the testEnvironment.xml
             file is found. This allows us to run Unit & Integration tests separately for CI, etc. -->
        <profile>
            <id>test-environment</id>
            <activation>
                <file>
                    <exists>src/main/assembly/testEnvironment.xml</exists>
                </file>
                <!-- Disable if we are doing a release (-Drelease) -->
                <property>
                    <name>!release</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <!-- This plugin builds the testEnvironment.zip package
                         based on the specifications in testEnvironment.xml.
                         TestEnvironment.zip is an entire DSpace installation
                         directory, which is installed by 'dspace-api' and
                         used to run our DSpace Unit/Integration tests.  -->
                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>generate-test-resources</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <descriptors>
                                        <descriptor>src/main/assembly/testEnvironment.xml</descriptor>
                                    </descriptors>
                                </configuration>
                            </execution>
                        </executions>
                        <inherited>false</inherited>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- Measure test coverage of Unit Tests using JaCoCo (when -DskipUnitTests=false) -->
        <profile>
            <id>measure-unit-test-coverage</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>skipUnitTests</name>
                    <value>false</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <!-- Report unit test code coverage -->
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <executions>
                            <!--
                                Prepares the property pointing to the JaCoCo runtime agent which
                                is passed as VM argument when Maven the Surefire plugin is executed.
                            -->
                            <execution>
                                <id>pre-unit-test</id>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                                <configuration>
                                    <!-- Sets the path to the file which contains the execution data. -->
                                    <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                                    <!--
                                        Sets the name of the property containing the settings
                                        for JaCoCo runtime agent.
                                    -->
                                    <propertyName>surefireJacoco</propertyName>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- Measure test coverage of Integration Tests using JaCoCo (when -DskipIntegrationTests=false) -->
        <profile>
            <id>measure-integration-test-coverage</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>skipIntegrationTests</name>
                    <value>false</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <!-- Report integration test code coverage -->
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <executions>
                            <!--
                                Prepares the property pointing to the JaCoCo runtime agent which
                                is passed as VM argument when Maven the Failsafe plugin is executed.
                            -->
                            <execution>
                                <id>pre-integration-test</id>
                                <phase>pre-integration-test</phase>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                                <configuration>
                                    <!-- Sets the path to the file which contains the execution data. -->
                                    <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
                                    <!--
                                        Sets the name of the property containing the settings
                                        for JaCoCo runtime agent.
                                    -->
                                    <propertyName>failsafeJacoco</propertyName>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--
             Generate a list of all THIRD PARTY open source licenses for all DSpace dependencies.
             This list is automatically written to the [src]/LICENSES_THIRD_PARTY file.
             Third party tools whose licenses are unknown by Maven are maintained in
             [src]/src/main/license/LICENSES_THIRD_PARTY.properties.
             To update "LICENSES_THIRD_PARTY", just run:
                 mvn clean verify -Dthird.party.licenses=true
        -->
        <profile>
            <id>third-party-licenses</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <!-- This profile should ONLY be active when user specifies
                     -Dthird.party.licenses=true on command-line. -->
                <property>
                    <name>third.party.licenses</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>license-maven-plugin</artifactId>
                        <version>2.5.0</version>
                        <!-- This plugin only needs to be run on the Parent POM
                             as it aggregates results from all child POMs. -->
                        <inherited>false</inherited>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>aggregate-add-third-party</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${root.basedir}</outputDirectory>
                                    <thirdPartyFilename>LICENSES_THIRD_PARTY</thirdPartyFilename>
                                    <excludedGroups>org\.dspace</excludedGroups>
                                    <!-- Use the template which groups all dependencies by their License type (easier to read!). -->
                                    <!-- SEE: https://fisheye.codehaus.org/browse/mojo/trunk/mojo/license-maven-plugin/src/main/resources/org/codehaus/mojo/license -->
                                    <fileTemplate>src/main/license/third-party-file-groupByLicense.ftl</fileTemplate>
                                    <!-- License names that should all be merged into the *first* listed name -->
                                    <licenseMerges>
                                        <licenseMerge>Apache Software License, Version 2.0|Apache Software License, version 2.0|The Apache Software License, Version 2.0|Apache License Version 2.0|Apache License, Version 2.0|Apache Public License 2.0|Apache License 2.0|Apache Software License - Version 2.0|Apache 2.0 License|Apache 2.0 license|Apache License V2.0|Apache 2|Apache License|Apache|ASF 2.0|Apache 2.0|Apache License v2|Apache License v2.0|Apache License, 2.0|Apache License, version 2.0|Apache-2.0|The Apache License, Version 2.0</licenseMerge>
                                        <!-- Ant-contrib is an Apache License -->
                                        <licenseMerge>Apache Software License, Version 2.0|http://ant-contrib.sourceforge.net/tasks/LICENSE.txt</licenseMerge>
                                        <!-- XML Commons claims these licenses, but it's really Apache License: https://xerces.apache.org/xml-commons/licenses.html -->
                                        <licenseMerge>Apache Software License, Version 2.0|The SAX License|The W3C License</licenseMerge>
                                        <!-- JDOM uses this license, but it's essentially just Apache -->
                                        <licenseMerge>Apache Software License, Version 2.0|Similar to Apache License but with the acknowledgment clause removed</licenseMerge>
                                        <licenseMerge>BSD License|The BSD License|BSD licence|BSD license|BSD|BSD-style license|New BSD License|New BSD license|Revised BSD License|BSD 2-Clause license|3-Clause BSD License|BSD 2-Clause|BSD 3-clause New License|BSD Licence 3|BSD-2-Clause|BSD-3-Clause|Modified BSD|The New BSD License|The BSD 3-Clause License (BSD3)|BSD License 3|BSD License 2.0|The (New) BSD License</licenseMerge>
                                        <!-- DSpace uses a BSD License -->
                                        <licenseMerge>BSD License|DSpace BSD License|DSpace Sourcecode License</licenseMerge>
                                        <!-- Coverity uses modified BSD: https://github.com/coverity/coverity-security-library -->
                                        <licenseMerge>BSD License|BSD style modified by Coverity</licenseMerge>
                                        <!-- Jaxen claims this license, but it's really BSD: http://jaxen.codehaus.org/license.html -->
                                        <licenseMerge>BSD License|http://jaxen.codehaus.org/license.html</licenseMerge>
                                        <!-- Java Advanced Imaging Image I/O Tools API core is just a BSD: https://github.com/jai-imageio/jai-imageio-core/blob/master/LICENSE.txt -->
                                        <licenseMerge>BSD License|BSD 3-clause License w/nuclear disclaimer</licenseMerge>
                                        <licenseMerge>Common Development and Distribution License (CDDL)|Common Development and Distribution License (CDDL) v1.0|COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0|Common Development and Distribution License|CDDL, v1.0|CDDL 1.0 license|CDDL 1.0|CDDL 1.1|CDDL|Dual license consisting of the CDDL v1.1 and GPL v2</licenseMerge>
                                        <!-- Jersey / Java Servlet API claims this license, but is actually CDDL 1.0: http://servlet-spec.java.net -->
                                        <licenseMerge>Common Development and Distribution License (CDDL)|CDDL + GPLv2 with classpath exception</licenseMerge>
                                        <!-- Jersey claims this license, but it is dual licensed with CDDL 1.1 being one: https://jersey.java.net/license.html -->
                                        <licenseMerge>Common Development and Distribution License (CDDL)|CDDL+GPL License</licenseMerge>
                                        <!-- JavaMail claims this license, but it is dual licensed with CDDL being one: https://java.net/projects/javamail/pages/License -->
                                        <licenseMerge>Common Development and Distribution License (CDDL)|GPLv2+CE|CDDL/GPLv2+CE</licenseMerge>
                                        <!-- JAXB claims this license, but it is dual licensed with CDDL being one: https://jaxb.java.net/ -->
                                        <licenseMerge>Common Development and Distribution License (CDDL)|GPL2 w/ CPE</licenseMerge>
                                        <!-- JBoss Transaction API claims this license, but it is dual licensed with CDDL being one: https://github.com/jboss/jboss-transaction-api_spec -->
                                        <licenseMerge>Common Development and Distribution License (CDDL)|GNU General Public License, Version 2 with the Classpath Exception</licenseMerge>
                                        <licenseMerge>Eclipse Distribution License, Version 1.0|Eclipse Distribution License (EDL), Version 1.0|Eclipse Distribution License - v 1.0|Eclipse Distribution License v. 1.0|EDL 1.0</licenseMerge>
                                        <licenseMerge>Eclipse Public License|Eclipse Public License - Version 1.0|Eclipse Public License - v 1.0|EPL 1.0 license|Eclipse Public License (EPL), Version 1.0|Eclipse Public License 1.0|Eclipse Public License v1.0|Eclipse Public License, Version 1.0|EPL 1.0|EPL 2.0|Eclipse Public License - v 2.0|EPL-2.0|Eclipse Public License 2.0|Eclipse Public License v. 2.0|Eclipse Public License, Version 2.0</licenseMerge>
                                        <!-- JUnit claims this license but is actually Eclipse Public License: http://junit.org/license.html -->
                                        <licenseMerge>Eclipse Public License|Common Public License Version 1.0</licenseMerge>
                                        <!-- Jersey is dual licensed as EPL but lists its main license as GPL: https://github.com/eclipse-ee4j/jersey#licensing-and-governance -->
                                        <licenseMerge>Eclipse Public License|The GNU General Public License (GPL), Version 2, With Classpath Exception</licenseMerge>
                                        <!-- Jakarta Expression Language is dual licensed as EPL and GPL: https://projects.eclipse.org/projects/ee4j.el -->
                                        <licenseMerge>Eclipse Public License|GNU General Public License, version 2 with the GNU Classpath Exception</licenseMerge>
                                        <!-- Jakarta RESTful web services is dual licensed as EPL and GPL: https://github.com/jakartaee/rest -->
                                        <licenseMerge>Eclipse Public License|GPL-2.0-with-classpath-exception</licenseMerge>
                                        <licenseMerge>GNU Lesser General Public License (LGPL)|The GNU Lesser General Public License, Version 2.1|GNU Lesser General Public License (LGPL), Version 2.1|GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1|GNU Lesser General Public License, version 2.1|GNU LESSER GENERAL PUBLIC LICENSE|GNU Lesser General Public License|GNU Lesser Public License|GNU Lesser General Public License, Version 2.1|Lesser General Public License (LGPL) v 2.1|LGPL 2.1|LGPL 2.1 license|LGPL 3.0 license|LGPL, v2.1 or later|LGPL|LGPL, version 2.1|lgpl|Lesser General Public License, version 3 or greater</licenseMerge>
                                        <!-- Hibernate ORM claims this license, but it's really regular LGPL: https://hibernate.org/community/license/ -->
                                        <licenseMerge>GNU Lesser General Public License (LGPL)|GNU Library General Public License v2.1 or later</licenseMerge>
                                        <licenseMerge>MIT License|The MIT License|MIT LICENSE|MIT|MIT license|MIT License (MIT)|The MIT License (MIT)</licenseMerge>
                                        <!-- BouncyCastle uses an MIT-style license: https://www.bouncycastle.org/licence.html -->
                                        <licenseMerge>MIT License|Bouncy Castle Licence</licenseMerge>
                                        <!-- netCDF tools uses an MIT-style license -->
                                        <licenseMerge>MIT License|(MIT-style) netCDF C library license</licenseMerge>
                                        <licenseMerge>Mozilla Public License|Mozilla Public License version 1.1|Mozilla Public License 1.1 (MPL 1.1)|MPL 1.1|Mozilla Public License Version 2.0|Mozilla Public License, Version 2.0|Mozilla Public License Version 1.1</licenseMerge>
                                        <!-- H2 Database claims this license, but for our purposes it's MPL: http://www.h2database.com -->
                                        <licenseMerge>Mozilla Public License|MPL 2.0, and EPL 1.0|MPL 2.0</licenseMerge>
                                        <!-- "concurrent.concurrent" claims this license, but is actually Public Domain: http://mvnrepository.com/artifact/concurrent/concurrent/ -->
                                        <licenseMerge>Public Domain|Public domain, Sun Microsoystems|Public Domain, per Creative Commons CC0</licenseMerge>
                                        <!-- WTFPL is essentially Public Domain: http://www.wtfpl.net/ ;) -->
                                        <licenseMerge>Public Domain|WTFPL</licenseMerge>
                                    </licenseMerges>
                                    <!-- For Licenses which are "Unknown" by Maven, load them from a properties file -->
                                    <useMissingFile>true</useMissingFile>
                                    <missingFile>src/main/license/LICENSES_THIRD_PARTY.properties</missingFile>
                                    <!-- Use the same properties file to override licenses listed in that file -->
                                    <overrideUrl>file:${root.basedir}/src/main/license/LICENSES_THIRD_PARTY.properties</overrideUrl>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!--
           These profiles activate the inclusion of various modules into
           the DSpace Build process. They activate automatically if the
           source module is in the local file system, correctly located
           relative to this file.
        -->

        <!--
           Builds DSpace "Assembly & Configuration" project
        -->
        <profile>
            <id>dspace</id>
            <activation>
                <file>
                    <exists>dspace/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace</module>
            </modules>
        </profile>

        <!--
           Builds central API for DSpace
        -->
        <profile>
            <id>dspace-api</id>
            <activation>
                <file>
                    <exists>dspace-api/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace-api</module>
            </modules>
        </profile>

        <!--
           Builds Services for DSpace
        -->
        <profile>
            <id>dspace-services</id>
            <activation>
                <file>
                    <exists>dspace-services/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace-services</module>
            </modules>
        </profile>

        <!--
           Builds XOAI Gateway extension for DSpace
        -->
        <profile>
            <id>dspace-oai</id>
            <activation>
                <file>
                    <exists>dspace-oai/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace-oai</module>
            </modules>
        </profile>

        <!--
             Builds RDF API and Data Provider extension for DSpace
        -->
        <profile>
            <id>dspace-rdf</id>
            <activation>
                <file>
                    <exists>dspace-rdf/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace-rdf</module>
            </modules>
        </profile>

        <!--
            Builds IIIF extension for DSpace
        -->
        <profile>
            <id>dspace-iiif</id>
            <activation>
                <file>
                    <exists>dspace-iiif/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace-iiif</module>
            </modules>
        </profile>

        <!--
           Builds SWORD extension for DSpace
        -->
        <profile>
            <id>dspace-sword</id>
            <activation>
                <file>
                    <exists>dspace-sword/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace-sword</module>
            </modules>
        </profile>


        <!--
           Builds SWORDv2 extension for DSpace
        -->
        <profile>
            <id>dspace-swordv2</id>
            <activation>
                <file>
                    <exists>dspace-swordv2/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace-swordv2</module>
            </modules>
        </profile>

        <!--
           Builds Server API webapp for DSpace
        -->
		<profile>
            <id>dspace-server-webapp</id>
            <activation>
                <file>
                    <exists>dspace-server-webapp/pom.xml</exists>
                </file>
            </activation>
            <modules>
                <module>dspace-server-webapp</module>
            </modules>
        </profile>

        <!--
         The 'release' profile is used by the 'maven-release-plugin' (see above)
         to actually perform a DSpace software release to Maven central.
         This profile contains settings which are ONLY enabled when performing
         a DSpace release. See also https://wiki.duraspace.org/display/DSPACE/Release+Procedure
         NOTE: You MUST trigger this profile by running "-Drelease"
         (as that flag also triggers other modules to be enabled/disabled as necessary for release)
        -->
        <profile>
            <id>release</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <!-- Enable this profile if we are doing a release (-Drelease) -->
                <property>
                    <name>release</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <!-- Configure Nexus plugin for new releases via Sonatype.
                         See: http://central.sonatype.org/pages/apache-maven.html -->
                    <plugin>
                        <groupId>org.sonatype.plugins</groupId>
                        <artifactId>nexus-staging-maven-plugin</artifactId>
                        <extensions>true</extensions>
                        <configuration>
                            <!-- In your settings.xml, your username/password
                                 MUST be specified for server 'ossrh' -->
                            <serverId>ossrh</serverId>
                            <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                            <!-- Disable autoclose of repository after upload, as this sometimes times out -->
                            <skipStagingRepositoryClose>true</skipStagingRepositoryClose>
                            <!-- Require manual verification / release to Maven Central -->
                            <autoReleaseAfterClose>false</autoReleaseAfterClose>
                            <!-- Increase Staging timeout to 10mins -->
                            <stagingProgressTimeoutMinutes>10</stagingProgressTimeoutMinutes>
                        </configuration>
                    </plugin>
                    <!-- For new releases, generate Source JAR files -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- For new releases, generate JavaDocs for each module -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Sign any new releases via GPG.
                         NOTE: you may optionall specify the "gpg.passphrase" in your settings.xml -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <!--
      Dependency management provides a means to control which
      versions of dependency jars are used for compilation
      and packaging into the distribution.  Rather than placing
      a version in your dependencies, look here first to see if
      its already strongly defined in dspace-parent and dspace-api.
    -->
    <dependencyManagement>
        <dependencies>
            <!-- DSpace core and endorsed Addons -->
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-api</artifactId>
                <version>8.1</version>
            </dependency>
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-api</artifactId>
                <type>test-jar</type>
                <version>8.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.dspace.modules</groupId>
                <artifactId>additions</artifactId>
                <version>8.1</version>
            </dependency>
            <dependency>
                <groupId>org.dspace.modules</groupId>
                <artifactId>server</artifactId>
                <classifier>classes</classifier>
                <version>8.1</version>
            </dependency>

            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-sword</artifactId>
                <version>8.1</version>
            </dependency>
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-swordv2</artifactId>
                <version>8.1</version>
            </dependency>
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-oai</artifactId>
                <version>8.1</version>
            </dependency>
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-services</artifactId>
                <version>8.1</version>
            </dependency>
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-server-webapp</artifactId>
                <type>test-jar</type>
                <version>8.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-rdf</artifactId>
                <version>8.1</version>
            </dependency>
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-iiif</artifactId>
                <version>8.1</version>
            </dependency>
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-server-webapp</artifactId>
                <version>8.1</version>
            </dependency>
            <!-- DSpace API Localization Packages -->
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>dspace-api-lang</artifactId>
                <version>[8.0.0,9.0.0)</version>
            </dependency>

            <!-- DSpace third Party Dependencies -->

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

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

            <dependency>
                <groupId>org.hibernate.orm</groupId>
                <artifactId>hibernate-jpamodelgen</artifactId>
                <version>${hibernate.version}</version>
            </dependency>

            <dependency>
                <groupId>org.hibernate.orm</groupId>
                <artifactId>hibernate-jcache</artifactId>
                <version>${hibernate.version}</version>
            </dependency>

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

            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
                <!-- This artifact doesn't track the main Hibernate version. -->
                <version>${hibernate-validator.version}</version>
            </dependency>

            <!-- Hibernate introduces multiple versions of jboss-logging. So, specify version we want -->
            <dependency>
                <groupId>org.jboss.logging</groupId>
                <artifactId>jboss-logging</artifactId>
                <version>3.6.1.Final</version>
            </dependency>

            <!-- Hibernate & Solr disagree on the version of antlr. So, specify the latest version -->
            <dependency>
                <groupId>org.antlr</groupId>
                <artifactId>antlr4-runtime</artifactId>
                <version>4.13.2</version>
            </dependency>

            <!-- Rome is used for RSS / ATOM syndication feeds -->
            <dependency>
                <groupId>com.rometools</groupId>
                <artifactId>rome</artifactId>
                <version>${rome.version}</version>
            </dependency>
            <dependency>
                <groupId>com.rometools</groupId>
                <artifactId>rome-modules</artifactId>
                <version>${rome.version}</version>
            </dependency>
            <dependency>
                <groupId>com.rometools</groupId>
                <artifactId>rome-utils</artifactId>
                <version>${rome.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
                <exclusions>
                    <!-- Spring JCL is unnecessary and conflicts with commons-logging when both are on classpath -->
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-jcl</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- Explicitly Specify Latest Version of Spring -->
            <dependency>
                <artifactId>spring-core</artifactId>
                <groupId>org.springframework</groupId>
                <version>${spring.version}</version>
            </dependency>

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

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

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

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

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

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

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

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

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

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

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring-boot.version}</version>
                <scope>test</scope>
                <exclusions>
                    <!-- We are still using JUnit 4, while Spring Boot defaults to JUnit 5 -->
                    <exclusion>
                        <groupId>org.junit.jupiter</groupId>
                        <artifactId>junit-jupiter</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                    <!-- We use a later version of Mockito -->
                    <exclusion>
                        <groupId>org.mockito</groupId>
                        <artifactId>mockito-junit-jupiter</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.mockito</groupId>
                        <artifactId>mockito-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.solr</groupId>
                <artifactId>solr-solrj</artifactId>
                <version>${solr.client.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.lucene</groupId>
                <artifactId>lucene-core</artifactId>
                <version>${solr.client.version}</version>
            </dependency>

            <!-- Tika is used to extract full text from documents in order to index in Solr -->
            <dependency>
                <groupId>org.apache.tika</groupId>
                <artifactId>tika-core</artifactId>
                <version>${tika.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tika</groupId>
                <artifactId>tika-parsers-standard-package</artifactId>
                <version>${tika.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>xml-apis</groupId>
                        <artifactId>xml-apis</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- Tika brings in multiple versions of this. Select the latest version. Always sync with Tika version -->
            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcpkix-jdk18on</artifactId>
                <version>${bouncycastle.version}</version>
            </dependency>
            <!-- Tika brings in multiple versions of this. Select the latest version. Always sync with Tika version -->
            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcprov-jdk18on</artifactId>
                <version>${bouncycastle.version}</version>
            </dependency>
            <!-- Tika brings in multiple versions of this. Select the latest version. Always sync with Tika version -->
            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcutil-jdk18on</artifactId>
                <version>${bouncycastle.version}</version>
            </dependency>
            <!-- Tika and axiom-api (in dspace-swordv2) disagree on versions -->
            <dependency>
                <groupId>org.apache.james</groupId>
                <artifactId>apache-mime4j-core</artifactId>
                <version>0.8.12</version>
            </dependency>
            <!-- Tika and solr-core disagree on versions of ASM -->
            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm</artifactId>
                <version>${asm.version}</version>
            </dependency>
            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm-analysis</artifactId>
                <version>${asm.version}</version>
            </dependency>
            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm-commons</artifactId>
                <version>${asm.version}</version>
            </dependency>
            <dependency>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm-tree</artifactId>
                <version>${asm.version}</version>
            </dependency>

            <!-- Solr-core and Postgres disagree on versions of Checker Qual -->
            <dependency>
                <groupId>org.checkerframework</groupId>
                <artifactId>checker-qual</artifactId>
                <version>3.48.4</version>
            </dependency>

            <!-- Several dependencies disagree on version of GSON including Jena, Google-OAuth-Client
                 and OpenAIRE Broker-Client -->
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.11.0</version>
            </dependency>

            <!-- Reminder: Keep icu4j (in Parent POM) synced with version used by lucene-analyzers-icu below,
             otherwise ICUFoldingFilterFactory may throw errors in tests.  -->
            <dependency>
                <groupId>org.apache.lucene</groupId>
                <artifactId>lucene-analyzers-icu</artifactId>
                <version>${solr.client.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.lucene</groupId>
                <artifactId>lucene-analyzers-smartcn</artifactId>
                <version>${solr.client.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.lucene</groupId>
                <artifactId>lucene-analyzers-stempel</artifactId>
                <version>${solr.client.version}</version>
                <scope>test</scope>
            </dependency>


            <dependency>
                <groupId>org.apache.ant</groupId>
                <artifactId>ant</artifactId>
                <version>1.10.15</version>
            </dependency>
            <dependency>
                <groupId>org.apache.jena</groupId>
                <artifactId>apache-jena-libs</artifactId>
                <type>pom</type>
                <version>${jena.version}</version>
            </dependency>
            <dependency>
                <groupId>net.handle</groupId>
                <artifactId>handle</artifactId>
                <version>9.3.1</version>
            </dependency>
            <!-- Only necessary to run Handle Server from commandline. Therefore, a runtime dependency. -->
            <dependency>
                <groupId>net.cnri</groupId>
                <artifactId>cnri-servlet-container</artifactId>
                <version>3.1.0</version>
                <scope>runtime</scope>
            </dependency>
            <!-- Jetty is ONLY needed to run Handle Server from commandline ONLY. Therefore, a runtime dependency. -->
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-server</artifactId>
                <version>${jetty.version}</version>
                <scope>runtime</scope>
            </dependency>
            <!-- The below Jetty dependency versions are only specified to avoid various dependency convergence errors
                 between Solr, CNRI Handle Server, and Jetty-Server (see above). We do NOT use Jetty directly. -->
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-deploy</artifactId>
                <version>${jetty.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-http</artifactId>
                <version>${jetty.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-io</artifactId>
                <version>${jetty.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-servlet</artifactId>
                <version>${jetty.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-util</artifactId>
                <version>${jetty.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-webapp</artifactId>
                <version>${jetty.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty.http2</groupId>
                <artifactId>http2-common</artifactId>
                <version>${jetty.version}</version>
                <scope>runtime</scope>
            </dependency>

            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>mets</artifactId>
                <version>1.5.2</version>
            </dependency>

            <!-- Required by Commons Configuration -->
            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>1.10.0</version>
            </dependency>
            <dependency>
                <groupId>commons-cli</groupId>
                <artifactId>commons-cli</artifactId>
                <version>1.9.0</version>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.17.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>4.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-configuration2</artifactId>
                <version>2.11.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
                <version>2.13.0</version>
                <exclusions>
                    <!-- Newer version is pulled in by Hibernate -->
                    <exclusion>
                        <groupId>jakarta.transaction</groupId>
                        <artifactId>jakarta.transaction-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.18.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.17.0</version>
            </dependency>
            <!-- NOTE: We don't use commons-logging, commons-compress or commons-csv directly,
                 but many dependencies rely on them. Only here specified to avoid dependency convergence issues. -->
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.3.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>1.27.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-csv</artifactId>
                <version>1.13.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>2.12.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-text</artifactId>
                <version>1.13.0</version>
            </dependency>
            <dependency>
                <groupId>commons-validator</groupId>
                <artifactId>commons-validator</artifactId>
                <version>1.9.0</version>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.13.0</version>
            </dependency>
            <dependency>
                <groupId>jakarta.activation</groupId>
                <artifactId>jakarta.activation-api</artifactId>
                <version>2.1.3</version>
            </dependency>
            <!-- Java Injection -->
            <dependency>
                <groupId>jakarta.inject</groupId>
                <artifactId>jakarta.inject-api</artifactId>
                <version>2.0.1</version>
            </dependency>
            <!-- Jakarta mail API definition -->
            <dependency>
                <groupId>jakarta.mail</groupId>
                <artifactId>jakarta.mail-api</artifactId>
                <version>2.1.3</version>
                <scope>provided</scope>
            </dependency>
            <!-- Jakarta mail default implementation/provider -->
            <dependency>
                <groupId>org.eclipse.angus</groupId>
                <artifactId>jakarta.mail</artifactId>
                <version>2.0.3</version>
            </dependency>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>6.1.0</version>
            </dependency>
            <dependency>
                <groupId>jakarta.el</groupId>
                <artifactId>jakarta.el-api</artifactId>
                <version>5.0.1</version>
            </dependency>

            <!-- Jaxen is needed by xoai and sword2-server, but they disagree on the versions -->
            <dependency>
                <groupId>jaxen</groupId>
                <artifactId>jaxen</artifactId>
                <version>2.0.0</version>
            </dependency>
            <dependency>
                <groupId>org.jdom</groupId>
                <artifactId>jdom2</artifactId>
                <version>2.0.6.1</version>
            </dependency>

            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!-- This bridge ensures any logging to slf4j is sent to log4j -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j2-impl</artifactId>
                <version>${log4j.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.pdfbox</groupId>
                <artifactId>pdfbox</artifactId>
                <version>${pdfbox-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.pdfbox</groupId>
                <artifactId>fontbox</artifactId>
                <version>${pdfbox-version}</version>
            </dependency>
            <!-- Tika and Jena disagree on version of Xerces to use. Select latest -->
            <dependency>
                <groupId>xerces</groupId>
                <artifactId>xercesImpl</artifactId>
                <version>2.12.2</version>
            </dependency>
            <!-- SWORDv1 and SWORDv2 modules both pull in various versions of xml-apis. Select latest version -->
            <dependency>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
                <version>1.4.01</version>
            </dependency>

            <!-- Keep icu4j synced with version used by lucene-analyzers-icu (Solr) -->
            <dependency>
                <groupId>com.ibm.icu</groupId>
                <artifactId>icu4j</artifactId>
                <version>62.2</version>
            </dependency>
            <!-- Codebase at https://github.com/DSpace/oclc-harvester2 -->
            <dependency>
                <groupId>org.dspace</groupId>
                <artifactId>oclc-harvester2</artifactId>
                <version>1.0.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>4.4.16</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.14</version>
            </dependency>
            <dependency>
              <groupId>org.apache.httpcomponents</groupId>
              <artifactId>httpmime</artifactId>
              <version>4.5.14</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <!-- http://errorprone.info : used to check for common/obvious code errors during compilation -->
            <dependency>
                <groupId>com.google.errorprone</groupId>
                <artifactId>error_prone_core</artifactId>
                <version>${errorprone.version}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>com.google.errorprone</groupId>
                <artifactId>error_prone_annotations</artifactId>
                <version>${errorprone.version}</version>
                <scope>compile</scope>
            </dependency>
            <!-- JUnit, Mockito and Hamcrest are used for Unit/Integration tests -->
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest</artifactId>
                <version>2.2</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-core</artifactId>
                <version>2.2</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-inline</artifactId>
                <version>3.12.4</version>
                <scope>test</scope>
            </dependency>
            <!-- H2 is an in-memory database used for Unit/Integration tests -->
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>2.3.232</version>
                <scope>test</scope>
            </dependency>

            <!-- Findbugs annotations -->
            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
                <version>3.0.2</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>annotations</artifactId>
                <version>3.0.1u2</version>
                <scope>provided</scope>
            </dependency>

            <!-- Converge miscellaneous transitive dependencies. -->
            <dependency>
                <groupId>com.fasterxml</groupId>
                <artifactId>classmate</artifactId>
                <version>1.7.0</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson-databind.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jsr310</artifactId>
                <version>${jackson-databind.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>32.1.3-jre</version>
                <exclusions>
                    <!-- Use version provided by Solr / Postgres -->
                    <exclusion>
                        <groupId>org.checkerframework</groupId>
                        <artifactId>checker-qual</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>xom</groupId>
                <artifactId>xom</artifactId>
                <version>1.3.9</version>
                <exclusions>
                    <exclusion>
                        <groupId>xml-apis</groupId>
                        <artifactId>xml-apis</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- json-path is needed by Spring HATEOAS -->
            <dependency>
                <groupId>com.jayway.jsonpath</groupId>
                <artifactId>json-path</artifactId>
                <version>${json-path.version}</version>
            </dependency>
            <!-- json-path-assert is just needed by tests -->
            <dependency>
                <groupId>com.jayway.jsonpath</groupId>
                <artifactId>json-path-assert</artifactId>
                <version>${json-path.version}</version>
                <scope>test</scope>
            </dependency>

            <!-- JAXB API and implementation (no longer bundled as of Java 11) -->
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>${jaxb-api.version}</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>${jaxb-runtime.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.annotation</groupId>
                <artifactId>jakarta.annotation-api</artifactId>
                <version>${jakarta-annotation.version}</version>
            </dependency>
            <!-- mockito-inline and hibernate-ehcache pull in different versions of byte-buddy. Specify which we want. -->
            <!-- TODO: We might be able to remove this after hibernate-ehcache is replaced by hibernate-jcache -->
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy</artifactId>
                <version>1.16.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <licenses>
        <license>
            <name>DSpace BSD License</name>
            <url>https://raw.github.com/DSpace/DSpace/main/LICENSE</url>
            <distribution>repo</distribution>
            <comments>
               A BSD 3-Clause license for the DSpace codebase.
            </comments>
        </license>
    </licenses>

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

    <mailingLists>
        <mailingList>
            <name>DSpace Technical Users List</name>
            <subscribe>
               https://groups.google.com/d/forum/dspace-tech
            </subscribe>
            <unsubscribe>
               https://groups.google.com/d/forum/dspace-tech
            </unsubscribe>
            <post>dspace-tech AT googlegroups.com</post>
            <archive>
               https://groups.google.com/d/forum/dspace-tech
            </archive>
        </mailingList>
        <mailingList>
            <name>DSpace Developers List</name>
            <subscribe>
               https://groups.google.com/d/forum/dspace-devel
            </subscribe>
            <unsubscribe>
               https://groups.google.com/d/forum/dspace-devel
            </unsubscribe>
            <post>dspace-devel AT googlegroups.com</post>
            <archive>
               https://groups.google.com/d/forum/dspace-devel
            </archive>
        </mailingList>
        <mailingList>
            <name>DSpace Community List</name>
            <subscribe>
               https://groups.google.com/d/forum/dspace-community
            </subscribe>
            <unsubscribe>
               https://groups.google.com/d/forum/dspace-community
            </unsubscribe>
            <post>dspace-community AT googlegroups.com</post>
            <archive>
               https://groups.google.com/d/forum/dspace-community
            </archive>
        </mailingList>
        <mailingList>
            <name>DSpace Commit Change-Log</name>
            <subscribe>
               https://groups.google.com/d/forum/dspace-changelog
            </subscribe>
            <unsubscribe>
               https://groups.google.com/d/forum/dspace-changelog
            </unsubscribe>
            <archive>
               https://groups.google.com/d/forum/dspace-changelog
            </archive>
        </mailingList>
    </mailingLists>

    <developers>
        <developer>
           <name>DSpace Committers</name>
           <email>dspace-devel@googlegroups.com</email>
           <url>https://wiki.lyrasis.org/display/DSPACE/DSpace+Committers</url>
           <roles>
             <role>committer</role>
           </roles>
        </developer>
    </developers>

    <contributors>
        <contributor>
           <name>DSpace Contributors</name>
           <email>dspace-tech@googlegroups.com</email>
           <url>https://wiki.lyrasis.org/display/DSPACE/DSpaceContributors</url>
           <roles>
             <role>developer</role>
           </roles>
        </contributor>
    </contributors>

    <!--
      Information about the SCM repository where source code exists.
    -->
    <scm>
        <connection>scm:git:git@github.com:DSpace/DSpace.git</connection>
        <developerConnection>scm:git:git@github.com:DSpace/DSpace.git</developerConnection>
        <url>git@github.com:DSpace/DSpace.git</url>
        <tag>dspace-8.1</tag>
    </scm>


    <!-- Configure our release repositories to use Sonatype.
         See: http://central.sonatype.org/pages/apache-maven.html -->
    <distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>

    <repositories>
        <!-- Check Maven Central first (before other repos below) -->
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <!-- Enable access to artifacts in Sonatype's snapshot repo for Snapshots ONLY -->
        <repository>
            <id>maven-snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
            <layout>default</layout>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <!-- For Handle Server -->
        <repository>
            <id>handle.net</id>
            <url>https://handle.net/maven</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>
