<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-core-parent</artifactId>
        <version>3.32.4</version>
    </parent>

    <artifactId>quarkus-core-deployment</artifactId>
    <name>Quarkus - Core - Deployment</name>

    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-classloader-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aesh</groupId>
            <artifactId>readline</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aesh</groupId>
            <artifactId>aesh</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
        </dependency>
        <dependency>
            <groupId>org.wildfly.common</groupId>
            <artifactId>wildfly-common</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus.gizmo</groupId>
            <artifactId>gizmo</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus.gizmo</groupId>
            <artifactId>gizmo2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.smallrye</groupId>
            <artifactId>jandex</artifactId>
        </dependency>
        <dependency>
            <groupId>io.smallrye</groupId>
            <artifactId>jandex-gizmo2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.smallrye.common</groupId>
            <artifactId>smallrye-common-os</artifactId>
        </dependency>
        <dependency>
            <groupId>io.smallrye.common</groupId>
            <artifactId>smallrye-common-process</artifactId>
        </dependency>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-development-mode-spi</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-hibernate-validator-spi</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-class-change-agent</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-bootstrap-core</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.sisu</groupId>
                    <artifactId>org.eclipse.sisu.inject</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>listenablefuture</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-bootstrap-maven-resolver</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-bootstrap-gradle-resolver</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <!-- We don't want the annotation processor to run
             as it leaves junk files in the project-->
            <groupId>org.eclipse.sisu</groupId>
            <artifactId>org.eclipse.sisu.inject</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-core</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus.gizmo</groupId>
            <artifactId>gizmo</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-builder</artifactId>
        </dependency>
        <dependency>
            <groupId>org.graalvm.sdk</groupId>
            <artifactId>nativeimage</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-bootstrap-core</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <!-- There's a single use of this, as a migration facilitator as we polish Java 25 support.
                It's probably worth removing soon: the implication would be that the JVM flags required
                by the various implementations of JvmModulesReconfigurer become strictly required
                (at least one of these will be required).
                Currently we're issues warnings when none is set - so in a few release cycles we should be
                able to expect users will have applied them, then remove this.
                At that time - please considering removing from the BOM as well -->
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy-agent</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-bom-quarkus-platform-properties</artifactId>
            <type>pom</type>
            <version>${project.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk18on</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.shrinkwrap</groupId>
            <artifactId>shrinkwrap-depchain</artifactId>
            <scope>test</scope>
            <type>pom</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <systemPropertyVariables>
                        <!-- Give tests a hint to not use containers, by default -->
                        <avoid-containers>true</avoid-containers>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce</id>
                        <phase>${maven-enforcer-plugin.phase}</phase>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <!--
                                This artifact contains JUnit dependencies so we need to override the rules
                                to avoid testing it.

                                Also we enforce some additional banned dependencies.
                            -->
                            <rules combine.self="override">
                                <dependencyConvergence/>
                                <externalRules>
                                    <location>classpath:enforcer-rules/quarkus-banned-dependencies.xml</location>
                                </externalRules>
                                <externalRules>
                                    <location>classpath:enforcer-rules/quarkus-banned-dependencies-okhttp.xml</location>
                                </externalRules>
                                <requiresMinimalDeploymentDependency implementation="io.quarkus.enforcer.RequiresMinimalDeploymentDependency"/>
                                <bannedDependencies>
                                    <excludes>
                                        <!-- findbugs is not required at runtime -->
                                        <exclude>com.google.code.findbugs:jsr305</exclude>
                                        <!-- com.google.guava:listenablefuture is empty and the ListenableFuture class is available in Guava -->
                                        <exclude>com.google.guava:listenablefuture</exclude>
                                    </excludes>
                                </bannedDependencies>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-compile</id>
                        <configuration>
                            <!-- We can't set "-release" and also use "-add-exports" -->
                            <release combine.self="override"></release>
                            <source>${maven.compiler.release}</source>
                            <target>${maven.compiler.release}</target>
                            <annotationProcessorPaths>
                                <path>
                                    <groupId>io.quarkus</groupId>
                                    <artifactId>quarkus-extension-processor</artifactId>
                                    <version>${project.version}</version>
                                </path>
                            </annotationProcessorPaths>
                            <compilerArgs>
                                <arg>-AsplitOnConfigRootDescription=true</arg>
                                <arg>--add-exports=java.base/jdk.internal.module=ALL-UNNAMED</arg>
                            </compilerArgs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>de.thetaphi</groupId>
                <artifactId>forbiddenapis</artifactId>
                <executions>
                    <execution>
                        <id>verify-forbidden-apis</id>
                        <configuration>
                            <signaturesFiles>
                                <signaturesFile>./banned-signatures.txt</signaturesFile>
                                <signaturesFile>${maven.multiModuleProjectDirectory}/.forbiddenapis/banned-signatures-common.txt</signaturesFile>
                            </signaturesFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>test-native-container-build</id>
            <activation>
                <property>
                    <name>start-containers</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <!-- Enable the container-based tests -->
                                <avoid-containers>false</avoid-containers>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <repositories>
        <repository>
            <id>central</id>
            <name>Maven Central</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>gradle</id>
            <name>Gradle releases repository</name>
            <url>https://repo.gradle.org/artifactory/libs-releases</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>
