<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ JBoss, Home of Professional Open Source.
  ~ Copyright 2021 Red Hat, Inc., and individual contributors
  ~ as indicated by the @author tags.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

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

    <parent>
        <groupId>org.jboss</groupId>
        <artifactId>jboss-parent</artifactId>
        <version>38</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.wildfly.security.jakarta</groupId>
    <artifactId>elytron-ee</artifactId>
    <version>3.0.3.Final</version>
    <packaging>pom</packaging>

    <name>WildFly Elytron - Jakarta EE</name>
    <description>WildFly Security - Jakarta EE 8</description>

    <issueManagement>
        <system>Jira</system>
        <url>https://issues.jboss.org/browse/ELYEE</url>
    </issueManagement>

    <licenses>
        <license>
            <name>Apache License 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>

    <scm>
        <connection>scm:git:git@github.com:wildfly-security/wildfly-elytron-ee.git</connection>
        <url>https://github.com/wildfly-security/wildfly-elytron-ee</url>
    </scm>

    <properties>
        <jdk.min.version>11</jdk.min.version>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        
        <version.jakarta.authentication>3.0.0</version.jakarta.authentication>
        <version.jakarta.authorization>2.1.0</version.jakarta.authorization>
        <version.jakarta.cdi>4.0.1</version.jakarta.cdi>
        <version.jakarta.jaxrs>3.1.0</version.jakarta.jaxrs>
        <version.jakarta.security>3.0.0</version.jakarta.security>
        <version.jakarta.servlet>6.0.0</version.jakarta.servlet>

        <version.com.nimbus>9.21</version.com.nimbus>
        <version.junit.junit>4.13.1</version.junit.junit>
        <version.org.glassfish.soteria>3.0.0</version.org.glassfish.soteria>
        <version.org.jboss.logging>3.4.2.Final</version.org.jboss.logging>
        <version.org.jboss.logging.tools>2.2.1.Final</version.org.jboss.logging.tools>
        <version.org.jboss.spec.jakarta.xml.ws>1.0.1.Final</version.org.jboss.spec.jakarta.xml.ws>
        <version.org.jboss.spec.org.jboss.spec.javax.security.jacc>2.0.0.Final</version.org.jboss.spec.org.jboss.spec.javax.security.jacc>
        <version.org.kohsuke.metainf-services.metainf-services>1.7</version.org.kohsuke.metainf-services.metainf-services>
        <version.org.jboss.resteasy>4.7.2.Final</version.org.jboss.resteasy>
        <version.org.jboss.ws.jbossws-spi>4.0.0.Final</version.org.jboss.ws.jbossws-spi>
        <version.org.wildfly.checkstyle-config>1.0.8.Final</version.org.wildfly.checkstyle-config>
        <version.org.wildfly.client.config>1.0.1.Final</version.org.wildfly.client.config>
        <version.org.wildfly.common>1.5.4.Final</version.org.wildfly.common>
        <version.org.wildfly.security.elytron>2.2.0.Final</version.org.wildfly.security.elytron>
        <!-- wildfly-elytron-jaspi was removed in Elytron 2.x so need to compare against 1.x -->
        <compatibility-version>1.20.2.Final</compatibility-version>
                
        <test.level>INFO</test.level>
        <!-- Checkstyle configuration -->
        <linkXRef>false</linkXRef>

        <!-- Modularized JDK support (various workarounds) - activated via profile -->
        <modular.jdk.args/>
        <modular.jdk.props/>
    </properties>

    <build>
        <resources>
            <resource>
                <directory>${project.build.sourceDirectory}</directory>
                <includes>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xsd</include>
                    <include>META-INF/LICENSE.txt</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>

        <plugins>        
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0-jboss-1</version>
                <executions>
                    <execution>
                        <id>default-compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        <configuration>
                            <release>11</release>
                            <buildDirectory>${project.build.directory}</buildDirectory>
                            <compileSourceRoots>${project.compileSourceRoots}</compileSourceRoots>
                            <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                            <additionalClasspathElements>
                                <additionalClasspathElement>${project.build.directory}/jdk-misc.jar</additionalClasspathElement>
                            </additionalClasspathElements>
                        </configuration>
                    </execution>
                </executions>
            </plugin>        
        
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <!-- This enables the resolution of ${groupId:artifactId} like props
                             to their real paths in the local Maven repository.
                             We use this to pass jmockit.jar as a javaagent in surefire's argLine -->
                        <id>getClasspathFilenames</id>
                        <goals>
                            <goal>properties</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>fetch-misc</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>get</goal>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifact>org.jboss:jdk-misc:2.Final</artifact>
                            <outputDirectory>${project.build.directory}</outputDirectory>
                            <stripVersion>true</stripVersion>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <trimStackTrace>false</trimStackTrace>
                    <forkCount>1</forkCount>
                    <reuseForks>false</reuseForks>
                    <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
                </configuration>
                <executions>
                    <execution>
                        <id>default-test</id>
                        <configuration>
                            <classesDirectory>${project.build.directory}/classes/META-INF/versions/9</classesDirectory>
                            <additionalClasspathElements>
                                <additionalClasspathElement>${project.build.directory}/classes</additionalClasspathElement>
                            </additionalClasspathElements>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            
            <plugin>
                <groupId>com.github.ferstl</groupId>
                <artifactId>depgraph-maven-plugin</artifactId>
                <version>3.2.2</version>
            </plugin>
            
        </plugins>

        <pluginManagement>
            <plugins>

                <!-- Surefire -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${version.surefire.plugin}</version>
                    <configuration>
                        <systemPropertyVariables>
                            <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                            <log4j.defaultInitOverride>true</log4j.defaultInitOverride>
                            <test.level>${test.level}</test.level>
                        </systemPropertyVariables>
                        <redirectTestOutputToFile>true</redirectTestOutputToFile>
                        <enableAssertions>true</enableAssertions>
                        <trimStackTrace>false</trimStackTrace>
                        <includes>
                            <include>**/*Test.java</include>
                            <include>**/*TestSuite.java</include>
                        </includes>
                        <childDelegation>true</childDelegation>
                        <reuseForks>false</reuseForks>
                        <!-- If jmockit is needed, update the argLine to include it as shown below -->
                        <!-- argLine>-javaagent:${settings.localRepository}/org/jmockit/jmockit/${version.jmockit}/jmockit-${version.jmockit}.jar ${modular.jdk.args} ${modular.jdk.props}</argLine -->
                        <argLine>${modular.jdk.args} ${modular.jdk.props}</argLine>
                        <!-- See also excludedGroups property in profiles -->
                    </configuration>
                </plugin>

                <!-- JAR -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${version.jar.plugin}</version>
                </plugin>

                <!-- Javadoc -->
                <plugin>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <configuration>
                        <notimestamp>true</notimestamp>
                        <doclint>none</doclint>
                        <show>protected</show>
                        <sourcepath>
                            ${project.basedir}/authentication/src/main/java/;
                            ${project.basedir}/authorization/src/main/java/;
                            ${project.basedir}/client/resteasy/src/main/java/;
                            ${project.basedir}/client/webservices/src/main/java/;
                        </sourcepath>
                        <sourceFileExcludes>
                            <exclude>org/wildfly/security/manager/JDKSpecific.java</exclude>
                        </sourceFileExcludes>
                    </configuration>
                    <executions>
                        <execution><!-- mvn javadoc:aggregate@api-javadoc -->
                            <id>api-javadoc</id>
                            <goals>
                                <goal>aggregate</goal>
                            </goals>
                            <configuration>
                                <destDir>api-javadoc</destDir>
                                <sourceFileIncludes>
                                    <include>org/wildfly/security/auth/jaspi/*.java</include>
                                </sourceFileIncludes>
                            </configuration>
                        </execution>
                        <execution><!-- mvn javadoc:aggregate@full-javadoc -->
                            <id>full-javadoc</id>
                            <goals>
                                <goal>aggregate</goal>
                            </goals>
                            <configuration>
                                <destDir>full-javadoc</destDir>
                                <show>private</show>
                                <sourceFileIncludes>
                                    <include>**\/\*.java</include>
                                </sourceFileIncludes>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <!-- Checkstyle -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>${version.checkstyle.plugin}</version>
                    <configuration>
                        <configLocation>wildfly-checkstyle/checkstyle.xml</configLocation>
                        <consoleOutput>true</consoleOutput>
                        <failsOnError>true</failsOnError>
                        <includeTestSourceDirectory>true</includeTestSourceDirectory>
                        <useFile/>
                        <excludes>**/*$logger.java,**/*$bundle.java</excludes>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.wildfly.checkstyle</groupId>
                            <artifactId>wildfly-checkstyle-config</artifactId>
                            <version>${version.org.wildfly.checkstyle-config}</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>check-style</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>checkstyle</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <dependencyManagement>
        <dependencies>
            <!-- Local Modules -->
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>jakarta-authentication</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>jakarta-authorization</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>jakarta-security</artifactId>
                <version>${project.version}</version>
            </dependency>
            
            <!-- Elytron Modules -->
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-auth</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-auth-server</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-base</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-client</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-credential</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-security-manager</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-permission</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-realm</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-security-manager-action</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
                <scope>provided</scope>
            </dependency>

            <!-- Jakarta EE APIs -->
            <dependency>
                <groupId>jakarta.authentication</groupId>
                <artifactId>jakarta.authentication-api</artifactId>
                <version>${version.jakarta.authentication}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.authorization</groupId>
                <artifactId>jakarta.authorization-api</artifactId>
                <version>${version.jakarta.authorization}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.enterprise</groupId>
                <artifactId>jakarta.enterprise.cdi-api</artifactId>
                <version>${version.jakarta.cdi}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.security.enterprise</groupId>
                <artifactId>jakarta.security.enterprise-api</artifactId>
                <version>${version.jakarta.security}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>${version.jakarta.servlet}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.ws.rs</groupId>
                <artifactId>jakarta.ws.rs-api</artifactId>
                <version>${version.jakarta.jaxrs}</version>
                <scope>provided</scope>
            </dependency>
            
            <!-- Other Modules -->
            <dependency>
                <groupId>com.nimbusds</groupId>
                <artifactId>nimbus-jose-jwt</artifactId>
                <version>${version.com.nimbus}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.glassfish.soteria</groupId>
                <artifactId>jakarta.security.enterprise</artifactId>
                <version>${version.org.glassfish.soteria}</version>
                <scope>provided</scope>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
               <groupId>org.wildfly.client</groupId>
               <artifactId>wildfly-client-config</artifactId>
               <version>${version.org.wildfly.client.config}</version>
               <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.logging</groupId>
                <artifactId>jboss-logging-annotations</artifactId>
                <version>${version.org.jboss.logging.tools}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.logging</groupId>
                <artifactId>jboss-logging</artifactId>
                <version>${version.org.jboss.logging}</version>
                <scope>provided</scope>
            </dependency>        
            <dependency>
                <groupId>org.jboss.logging</groupId>
                <artifactId>jboss-logging-processor</artifactId>
                <version>${version.org.jboss.logging.tools}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.kohsuke.metainf-services</groupId>
                <artifactId>metainf-services</artifactId>
                <version>${version.org.kohsuke.metainf-services.metainf-services}</version>
                <optional>true</optional>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.wildfly.common</groupId>
                <artifactId>wildfly-common</artifactId>
                <version>${version.org.wildfly.common}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-client</artifactId>
                <version>${version.org.jboss.resteasy}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.spec.jakarta.xml.ws</groupId>
                <artifactId>jboss-jakarta-xml-ws-api_3.0_spec</artifactId>
                <version>${version.org.jboss.spec.jakarta.xml.ws}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.ws</groupId>
                <artifactId>jbossws-spi</artifactId>
                <version>${version.org.jboss.ws.jbossws-spi}</version>
                <scope>provided</scope>
            </dependency>
                    
            <!-- Test Modules -->
            <dependency>
                <groupId>org.wildfly.security</groupId>
                <artifactId>wildfly-elytron-password-impl</artifactId>
                <version>${version.org.wildfly.security.elytron}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${version.junit.junit}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <profiles>
        <profile>
            <id>modularizedJdk</id>
            <activation>
                <jdk>[9,)</jdk>
            </activation>
            <properties>
                <!-- [WFCORE-1431] remove SASL workaround -->
                <modular.jdk.args>--add-modules java.sql --illegal-access=permit</modular.jdk.args>
                <!-- use version of jboss-logging that works much better with JDK9 -->
                <modular.jdk.props>-Djdk.attach.allowAttachSelf=true</modular.jdk.props>
                <!-- 2.20.x doesn't start on JDK10-->
                <version.surefire.plugin>2.19.1</version.surefire.plugin>
            </properties>
        </profile>

        <profile>
            <id>skip-default-tests</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>default-test</id>
                                <phase>none</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>java8-test-profile</id>
            <activation>
                <property>
                    <name>java8.home</name>
                </property>
            </activation>
            <properties>
                <modular.jdk.args/>
                <modular.jdk.props/>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>java8-test</id>
                                <phase>test</phase>
                                <goals>
                                    <goal>test</goal>
                                </goals>
                                <configuration>
                                    <reportsDirectory>${project.build.directory}/surefire-reports/java8</reportsDirectory>
                                    <jvm>${java8.home}/bin/java</jvm>
                                    <additionalClasspathElements>
                                        <additionalClasspathElement>${java8.home}/lib/tools.jar</additionalClasspathElement>
                                    </additionalClasspathElements>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>java9-test-profile</id>
            <activation>
                <property>
                    <name>java9.home</name>
                </property>
            </activation>
            <properties>
                <modular.jdk.args/>
                <modular.jdk.props/>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>java9-test</id>
                                <phase>test</phase>
                                <goals>
                                    <goal>test</goal>
                                </goals>
                                <configuration>
                                    <reportsDirectory>${project.build.directory}/surefire-reports/java9</reportsDirectory>
                                    <jvm>${java9.home}/bin/java</jvm>
                                    <classesDirectory>${project.build.directory}/classes/META-INF/versions/9</classesDirectory>
                                    <additionalClasspathElements>
                                        <additionalClasspathElement>${project.build.outputDirectory}</additionalClasspathElement>
                                        <additionalClasspathElement>${java9.home}/lib/tools.jar</additionalClasspathElement>
                                    </additionalClasspathElements>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <repositories>
        <repository>
            <id>public-jboss</id>
            <name>Public JBoss Repository Group</name>
            <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>public-jboss-plugins</id>
            <name>Public JBoss Repository Group</name>
            <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
        </pluginRepository>
    </pluginRepositories>

    <modules>
        <module>authentication</module>
        <module>authorization</module>
        <module>client/resteasy</module>
        <module>client/webservices</module>
        <module>security</module>
    </modules>

</project>
