<?xml version="1.0" encoding="UTF-8"?>
<!--

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you 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.

-->
<server>
    <tools lib="lib">
        <asadmin jar="client/appserver-cli.jar"/>
    </tools>
    <java version="17">
        <platform version="11"/>
        <platform version="12"/>
        <platform version="13"/>
        <platform version="14"/>
        <platform version="15"/>
        <platform version="16"/>
        <platform version="17"/>
    </java>
    <javaee version="10.0.0">
        <profile version="9.0.0" type="web"/>
        <profile version="9.0.0" type="full" check="full"/>
        <profile version="9.1.0" type="web"/>
        <profile version="9.1.0" type="full" check="full"/>
        <profile version="10.0.0" type="web"/>
        <profile version="10.0.0" type="full" check="full"/>
        <module type="war"/>
        <module type="car" check="full"/>
        <module type="ear" check="full"/>
        <module type="ejb" check="full"/>
        <module type="rar" check="full"/>
        <check name="full">
            <file path="appclient-server-core.jar"/>
        </check>
    </javaee>
    <library id="Jakarta EE">
        <classpath>
            <fileset dir="modules">
                <include name="jakarta\..+\.jar"/>
                <include name="jakarta.validation-api.jar"/>
                <include name="jakarta.enterprise.cdi-api.jar"/>
                <include name="jaxb-osgi.jar"/>
                <include name="webservices-osgi.jar"/>
                <include name="weld-osgi-bundle.jar"/>
            </fileset>            
            <fileset dir="../mq/lib">
                <include name="jaxm-api.jar"/>
            </fileset>
        </classpath>
        <javadocs>
            <lookup path="docs/jakartaee10-doc-api.jar"/>
        </javadocs>
        <sources>
        </sources>
    </library>
    <library id="MicroProfile">
        <classpath>
            <fileset dir="modules">
                <include name="microprofile.*\-api.jar"/>
            </fileset>
        </classpath>
        <javadocs>
        </javadocs>
        <sources>
        </sources>
    </library>
    <library id="Jersey 3">
        <classpath>
            <fileset dir="modules">
                <include name="jackson.+\.jar"/>
                <include name="jersey.+\.jar"/>
                <include name="jettison.*\.jar"/>
            </fileset>
        </classpath>
        <javadocs>
            <link url="https://repo1.maven.org/maven2/org/glassfish/jersey/jersey-documentation/3.1.0/jersey-documentation-3.1.0-docbook.zip"/>
        </javadocs>
        <sources>
        </sources>
    </library>
    <library id="JAX-RS">
        <classpath>
            <fileset dir="modules">
                <include name=".+\.ws.rs-api.jar"/>
            </fileset>
        </classpath>
        <javadocs> 
        </javadocs>
        <sources>
        </sources>
    </library>
</server>
