<?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/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.mock-server</groupId>
        <artifactId>mockserver</artifactId>
        <version>7.2.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>mockserver-client-java</artifactId>

    <name>MockServer Java Client</name>
    <description>A java client for the MockServer</description>
    <url>https://www.mock-server.com</url>

    <properties>
        <module.name>org.mockserver.client</module.name>
    </properties>

    <dependencies>
        <!-- mockserver -->
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>mockserver-core</artifactId>
            <!--
                The Java client only builds/serialises requests, responses and expectations and talks to a
                remote (or containerised) MockServer over HTTP. The server-side engines below are never loaded
                by any client code path — template rendering, JavaScript/WASM execution, fake-data generation and
                gRPC/protobuf transcoding all happen inside the running server, not in the client JVM. Excluding
                them keeps a test-only client classpath small and removes their (often divergent) transitive
                versions from downstream builds. Swagger/OpenAPI is intentionally NOT excluded: the client's
                ObjectMapperFactory statically initialises schema serializers that reference
                io.swagger.v3.oas.models, so swagger-core must remain on the classpath.

                Consumers using strict version alignment (Maven Enforcer dependencyConvergence) should still
                import org.mock-server:mockserver-bom, which pins every remaining transitive version.
            -->
            <exclusions>
                <!-- Velocity templating (server-side TemplateEngine only) -->
                <exclusion>
                    <groupId>org.apache.velocity</groupId>
                    <artifactId>velocity-engine-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.velocity</groupId>
                    <artifactId>velocity-engine-scripting</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.velocity.tools</groupId>
                    <artifactId>velocity-tools-generic</artifactId>
                </exclusion>
                <!-- Mustache templating (server-side TemplateEngine only) -->
                <exclusion>
                    <groupId>com.samskivert</groupId>
                    <artifactId>jmustache</artifactId>
                </exclusion>
                <!-- GraalVM JavaScript engine (server-side template execution only) -->
                <exclusion>
                    <groupId>org.graalvm.polyglot</groupId>
                    <artifactId>polyglot</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.graalvm.polyglot</groupId>
                    <artifactId>js</artifactId>
                </exclusion>
                <!-- WASM runtime (server-side custom rule execution only) -->
                <exclusion>
                    <groupId>com.dylibso.chicory</groupId>
                    <artifactId>runtime</artifactId>
                </exclusion>
                <!-- Fake data generation (server-side template functions only) -->
                <exclusion>
                    <groupId>net.datafaker</groupId>
                    <artifactId>datafaker</artifactId>
                </exclusion>
                <!-- Protobuf/gRPC JSON transcoding (server-side gRPC handling only) -->
                <exclusion>
                    <groupId>com.google.protobuf</groupId>
                    <artifactId>protobuf-java-util</artifactId>
                </exclusion>
                <!-- Swagger/OpenAPI parser (server-side spec parsing only). The client serialises
                     OpenAPIExpectation/OpenAPIDefinition as plain JSON (a spec URL or payload string) and the
                     server does the parsing, so the client never loads the parser. ObjectMapperFactory registers
                     its Swagger-coupled serializers only when swagger-core is present, so excluding the parser
                     here does not break object-mapper initialisation. This also removes the large legacy
                     transitive stack the parser drags in (swagger-core, com.github.java-json-tools, old Guava,
                     jsr305, snakeyaml, jakarta.xml.bind, etc.), which is the bulk of the remaining
                     dependencyConvergence conflicts for a client-only consumer. -->
                <exclusion>
                    <groupId>io.swagger.parser.v3</groupId>
                    <artifactId>swagger-parser</artifactId>
                </exclusion>
                <!-- Rhino is declared by mockserver-core only to pin the version the Swagger parser pulls
                     (CVE fix); with the parser excluded the client never references it. -->
                <exclusion>
                    <groupId>org.mozilla</groupId>
                    <artifactId>rhino</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>mockserver-testing</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- commons & guava -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>

        <!-- logging -->
        <dependency> <!-- will map to any underlying logging framework -->
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <optional>true</optional> <!-- do not impose on project importing mock-server -->
        </dependency>

        <!-- test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
        </plugins>
    </build>

</project>
