<?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.kuali.coeus</groupId>
    <artifactId>coeus-api</artifactId>
    <version>2603.0002</version>
    <packaging>pom</packaging>
    <description>
        The Kuali Coeus API module contains service apis for the Kuali Coeus application.
    </description>
    <url>https://www.kuali.co/products/research/</url>
    <inceptionYear>2014</inceptionYear>
    <organization>
        <name>Kuali, Inc.</name>
        <url>https://www.kuali.co/</url>
    </organization>

    <properties>

        <junit.version>6.0.2</junit.version>

        <error_prone_core.version>2.46.0</error_prone_core.version>
        <license-maven-plugin.version>2.7.1</license-maven-plugin.version>
        <maven-clean-plugin.version>3.5.0</maven-clean-plugin.version>
        <maven-deploy-plugin.version>3.1.4</maven-deploy-plugin.version>
        <maven-dependency-plugin.version>3.9.0</maven-dependency-plugin.version>
        <maven-install-plugin.version>3.1.4</maven-install-plugin.version>
        <maven-javadoc-plugin.version>3.12.0</maven-javadoc-plugin.version>
        <maven-jar-plugin.version>3.5.0</maven-jar-plugin.version>
        <maven-release-plugin.version>3.3.1</maven-release-plugin.version>
        <maven-resources-plugin.version>3.4.0</maven-resources-plugin.version>
        <maven-site-plugin.version>3.21.0</maven-site-plugin.version>
        <maven-source-plugin.version>3.4.0</maven-source-plugin.version>
        <maven-surefire-plugin.version>3.5.4</maven-surefire-plugin.version>
        <maven-compiler-plugin.version>3.14.1</maven-compiler-plugin.version>

        <project.encoding>UTF-8</project.encoding>
        <project.build.sourceEncoding>${project.encoding}</project.build.sourceEncoding>
        <project.reporting.outputEncoding>${project.encoding}</project.reporting.outputEncoding>

        <project.java.version>21</project.java.version>
        <project.compiler.release>${project.java.version}</project.compiler.release>

        <scm.connection>scm:git:https://github.com/kuali/kc-api</scm.connection>
        <scm.developerConnection>scm:git:https://github.com/kuali/kc-api</scm.developerConnection>
        <scm.url>scm:git:https://github.com/kuali/kc-api</scm.url>

        <issueManagement.system>github</issueManagement.system>
        <issueManagement.url>https://github.com/kuali/kc-api/issues</issueManagement.url>

        <dm.snapshotRepository.id>kualico.nexus.snapshots</dm.snapshotRepository.id>
        <dm.snapshotRepository.name>KualiCo Nexus Snapshots Repository</dm.snapshotRepository.name>
        <dm.snapshotRepository.url>https://nexus.kuali.co/nexus/content/repositories/snapshots</dm.snapshotRepository.url>

        <dm.repository.id>kualico.nexus.releases</dm.repository.id>
        <dm.repository.name>KualiCo Nexus Releases Repository</dm.repository.name>
        <dm.repository.url>https://nexus.kuali.co/nexus/content/repositories/releases</dm.repository.url>
    </properties>

    <modules>
        <module>coeus-api-all</module>
    </modules>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${maven-clean-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <useIncrementalCompilation>false</useIncrementalCompilation>
                        <release>${project.compiler.release}</release>
                        <fork>true</fork>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>${maven-dependency-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>${maven-deploy-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>${maven-install-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${maven-jar-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>${maven-javadoc-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${maven-resources-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>${maven-release-plugin.version}</version>
                    <configuration>
                        <useReleaseProfile>true</useReleaseProfile>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>${maven-site-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${maven-source-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <configuration>
                        <useSystemClassLoader>false</useSystemClassLoader>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <profiles>
        <profile>
            <id>enforcer</id>
            <activation>
                <property>
                    <name>enforce-project-quality</name>
                </property>
            </activation>

            <properties>
                <extra-enforcer-rules.version>1.11.0</extra-enforcer-rules.version>
                <maven-enforcer-plugin.version>3.6.2</maven-enforcer-plugin.version>
                <ossindex-maven-enforcer-rules.version>3.2.0</ossindex-maven-enforcer-rules.version>
                <enforcer.require.java.version>${project.java.version}</enforcer.require.java.version>
                <enforcer.max.jdk.version>${project.java.version}</enforcer.max.jdk.version>
                <enforcer.phase>validate</enforcer.phase>
            </properties>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-enforcer-plugin</artifactId>
                            <version>${maven-enforcer-plugin.version}</version>
                            <executions>
                                <execution>
                                    <id>enforcer-rules</id>
                                    <goals>
                                        <goal>enforce</goal>
                                    </goals>
                                    <phase>${enforcer.phase}</phase>
                                    <configuration>
                                        <rules>
                                            <banCircularDependencies />
                                            <banDuplicatePomDependencyVersions />
                                            <banVulnerable implementation="org.sonatype.ossindex.maven.enforcer.BanVulnerableDependencies" />
                                            <DependencyConvergence />
                                            <enforceBytecodeVersion>
                                                <maxJdkVersion>${enforcer.max.jdk.version}</maxJdkVersion>
                                            </enforceBytecodeVersion>
                                            <requireJavaVersion>
                                                <version>${enforcer.require.java.version}</version>
                                            </requireJavaVersion>
                                            <requireMavenVersion>
                                                <version>[3.3,4.0)</version>
                                            </requireMavenVersion>
                                            <requirePluginVersions>
                                                <message>Best Practice is to always define plugin versions!</message>
                                                <banLatest>true</banLatest>
                                                <banRelease>true</banRelease>
                                                <banSnapshots>true</banSnapshots>
                                                <phases>clean,install,deploy,release</phases>
                                            </requirePluginVersions>
                                        </rules>
                                        <fail>true</fail>
                                    </configuration>
                                </execution>
                            </executions>
                            <dependencies>
                                <dependency>
                                    <groupId>org.codehaus.mojo</groupId>
                                    <artifactId>extra-enforcer-rules</artifactId>
                                    <version>${extra-enforcer-rules.version}</version>
                                </dependency>

                                <dependency>
                                    <groupId>org.sonatype.ossindex.maven</groupId>
                                    <artifactId>ossindex-maven-enforcer-rules</artifactId>
                                    <version>${ossindex-maven-enforcer-rules.version}</version>
                                </dependency>
                            </dependencies>
                        </plugin>
                    </plugins>
                </pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-enforcer-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>license</id>
            <properties>
                <license.name>pre_release</license.name>
                <!-- the resolver needs a uri but the template does not.  Just a regular file path -->
                <license.resolver>file://${maven.multiModuleProjectDirectory}/src/license</license.resolver>
                <license.description.template>${maven.multiModuleProjectDirectory}/src/license/header-description.ftl</license.description.template>
            </properties>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>license-maven-plugin</artifactId>
                            <version>${license-maven-plugin.version}</version>
                            <executions>
                                <execution>
                                    <id>update-license-header</id>
                                    <goals>
                                        <goal>update-file-header</goal>
                                    </goals>
                                    <phase>process-sources</phase>
                                </execution>
                            </executions>
                            <configuration>
                                <licenseName>${license.name}</licenseName>
                                <licenseResolver>${license.resolver}</licenseResolver>
                                <addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
                                <descriptionTemplate>${license.description.template}</descriptionTemplate>
                                <canUpdateCopyright>true</canUpdateCopyright>
                                <copyrightOwners>Kuali, Inc. - All Rights Reserved</copyrightOwners>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>license-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>grm</id>
            <!-- comment out activation section to turn this profile off permanently-->
            <activation>
                <property>
                    <name>!grm.off</name>
                </property>
            </activation>

            <properties>
                <scm.connection>scm:git:https://github.com/kualico/kc-api</scm.connection>
                <scm.developerConnection>scm:git:https://github.com/kualico/kc-api</scm.developerConnection>
                <scm.url>scm:git:https://github.com/kualico/kc-api</scm.url>

                <issueManagement.system>github</issueManagement.system>
                <issueManagement.url>https://github.com/kualico/kc-api/issues</issueManagement.url>

                <dm.snapshotRepository.id>kualico.nexus.research.snapshots</dm.snapshotRepository.id>
                <dm.snapshotRepository.name>KualiCo Nexus Research Snapshots Repository</dm.snapshotRepository.name>
                <dm.snapshotRepository.url>https://nexus.kuali.co/nexus/content/repositories/research-snapshots/</dm.snapshotRepository.url>

                <dm.repository.id>kualico.nexus.research.releases</dm.repository.id>
                <dm.repository.name>KualiCo Nexus Research Releases Repository</dm.repository.name>
                <dm.repository.url>https://nexus.kuali.co/nexus/content/repositories/research-releases/</dm.repository.url>
            </properties>

            <repositories>
                <repository>
                    <id>kualico.nexus.research</id>
                    <name>KualiCo Nexus Research Group</name>
                    <url>https://nexus.kuali.co/nexus/content/groups/research-repos/</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                </repository>
                <repository>
                    <id>herodevs-nes-registry</id>
                    <url>https://registry.nes.herodevs.com/maven</url>
                </repository>
            </repositories>

            <pluginRepositories>
                <pluginRepository>
                    <id>kualico.nexus.research</id>
                    <name>KualiCo Nexus Research Group</name>
                    <url>https://nexus.kuali.co/nexus/content/groups/research-repos/</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                </pluginRepository>
                <pluginRepository>
                    <id>herodevs-nes-registry</id>
                    <url>https://registry.nes.herodevs.com/maven</url>
                </pluginRepository>
            </pluginRepositories>
        </profile>

        <!-- enables the error prone compiler for strict compilation -->
        <profile>
            <id>error-prone</id>
            <activation>
                <property>
                    <name>enforce-project-quality</name>
                </property>
            </activation>

            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>${maven-compiler-plugin.version}</version>
                            <configuration>
                                <useIncrementalCompilation>false</useIncrementalCompilation>
                                <release>${project.compiler.release}</release>
                                <showDeprecation>true</showDeprecation>
                                <showWarnings>true</showWarnings>
                                <fork>true</fork>
                                <compilerArgs>
                                    <arg>--should-stop=ifError=FLOW</arg>
                                    <arg>-XDcompilePolicy=simple</arg>
                                    <arg>-XDaddTypeAnnotationsToSymbol=true</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>
                                </compilerArgs>
                                <annotationProcessorPaths>
                                    <path>
                                        <groupId>com.google.errorprone</groupId>
                                        <artifactId>error_prone_core</artifactId>
                                        <version>${error_prone_core.version}</version>
                                    </path>
                                </annotationProcessorPaths>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>
    </profiles>

    <repositories>
        <repository>
            <id>kualico.nexus</id>
            <name>KualiCo Nexus Group</name>
            <url>https://nexus.kuali.co/nexus/content/groups/public/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>kualico.nexus</id>
            <name>KualiCo Nexus Group</name>
            <url>https://nexus.kuali.co/nexus/content/groups/public/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>

    <scm>
        <connection>${scm.connection}</connection>
        <developerConnection>${scm.developerConnection}</developerConnection>
        <url>${scm.url}</url>
        <tag>coeus-api-2603.0002</tag>
    </scm>

    <distributionManagement>
        <snapshotRepository>
            <id>${dm.snapshotRepository.id}</id>
            <name>${dm.snapshotRepository.name}</name>
            <url>${dm.snapshotRepository.url}</url>
        </snapshotRepository>
        <repository>
            <id>${dm.repository.id}</id>
            <name>${dm.repository.name}</name>
            <url>${dm.repository.url}</url>
        </repository>
    </distributionManagement>

    <issueManagement>
        <system>${issueManagement.system}</system>
        <url>${issueManagement.url}</url>
    </issueManagement>
</project>
