<!--
    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.
-->
<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>
    <parent>
        <groupId>org.apache.felix</groupId>
        <artifactId>felix-parent</artifactId>
        <version>9</version>
        <relativePath>../../pom/pom.xml</relativePath>
    </parent>

    <name>Apache Felix Http Jetty 12.x</name>
    <description>This is an implementation of the R8.1 OSGi Servlet Service, the R7 OSGi Http Service and the R7 OSGi Http Whiteboard Specification</description>

    <artifactId>org.apache.felix.http.jetty12</artifactId>
    <version>1.0.20</version>
    <packaging>bundle</packaging>

    <scm>
        <connection>scm:git:https://github.com/apache/felix-dev.git</connection>
        <developerConnection>scm:git:https://github.com/apache/felix-dev.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=felix-dev.git</url>
      <tag>org.apache.felix.http.jetty12-1.0.20</tag>
  </scm>

    <properties>
        <felix.java.version>17</felix.java.version>
        <jetty.version>12.0.16</jetty.version>
        <baseline.skip>true</baseline.skip>
        <org.ops4j.pax.exam.version>4.13.3</org.ops4j.pax.exam.version>
        <!-- To debug the pax process, override this with -D -->
        <pax.vm.options>-Xmx512M</pax.vm.options>
    </properties>

    <build>
        <plugins>

            <!-- Use a groovy script to preserve the META-INF/services/* files for the artifacts that are embeded in the uber jar -->
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>groovy-maven-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <id>groovy-magic</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <source><![CDATA[
                                // make an output dir for the merged resource files
                                def slDir = new File(project.build.directory, "serviceloader-resources");
                                slDir.mkdirs();

                                // scan each of the artifacts to preserve the information found in any META-INF/services/* files
                                project.artifacts.each() { artifact ->

                                    if (artifact.getArtifactHandler().isAddedToClasspath() && !org.apache.maven.artifact.Artifact.SCOPE_TEST.equals( artifact.getScope() )
                                            && !"org.eclipse.jetty.websocket".equals(artifact.getGroupId()) // skip the optional websocket artifacts
                                            && !"org.eclipse.jetty.ee10.websocket".equals(artifact.getGroupId()) // skip the optional websocket artifacts
                                            && !"jetty-annotations".equals(artifact.getArtifactId()) // skip the transitive artifacts from the optional websocket artifacts
                                            && !"jetty-plus".equals(artifact.getArtifactId())
                                            && !"jetty-webapp".equals(artifact.getArtifactId())
                                            && !"jetty-ee".equals(artifact.getArtifactId())) {
                                        def jar;
                                        try {
                                            jar = new java.util.jar.JarFile(artifact.file)
                                            jar.stream().each() { entry ->
                                               if (!entry.isDirectory() && entry.name.startsWith("META-INF/services/")) {

                                                   // check if we already have a file with this name
                                                   def svcFile = new File(slDir, entry.name)
                                                   def svcSet = new LinkedHashSet();
                                                   if (svcFile.exists()) {
                                                       // found existing file, so load the items from the existing file so we can merge
                                                       svcFile.eachLine { className ->
                                                           className = className.trim();
                                                           if (!className.isEmpty()) {
                                                               svcSet.add(className);
                                                           }
                                                       }
                                                   }

                                                   // read the content of the found entry
                                                   def lineReader;
                                                   try {
                                                       lineReader = new BufferedReader(new InputStreamReader(jar.getInputStream(entry), java.nio.charset.StandardCharsets.UTF_8));
                                                       def className;
                                                       while ( ( className = lineReader.readLine() ) != null ) {
                                                           className = className.trim();
                                                           if (!className.isEmpty()) {
                                                               svcSet.add(className);
                                                           }
                                                       }
                                                   } finally {
                                                       // cleanup
                                                       if (lineReader != null) {
                                                           lineReader.close()
                                                       }
                                                   }

                                                   // write the merged data to the output file
                                                   if (!svcSet.isEmpty()) {
                                                       // make any missing folders
                                                       svcFile.getParentFile().mkdirs();

                                                       svcFile.withWriter('utf-8') { writer ->
                                                           svcSet.each() { item ->
                                                               writer.writeLine item;
                                                           }

                                                           // finish up with a blank line
                                                           writer.println();
                                                       }
                                                   }

                                               }
                                            }
                                        } finally {
                                            // cleanup
                                            if (jar != null) {
                                                jar.close();
                                            }
                                        }
                                    }

                                }
                            ]]></source>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>6.0.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Bundle-Version>${project.version}</Bundle-Version>
                        <X-Jetty-Version>
                            ${jetty.version}
                        </X-Jetty-Version>
                        <Bundle-Activator>
                            org.apache.felix.http.jetty.internal.JettyActivator
                        </Bundle-Activator>
                        <Export-Package>
                            org.osgi.service.http,
                            org.osgi.service.http.context,
                            org.osgi.service.http.runtime,
                            org.osgi.service.http.runtime.dto,
                            org.osgi.service.http.whiteboard,
                            org.osgi.service.servlet.context,
                            org.osgi.service.servlet.runtime,
                            org.osgi.service.servlet.runtime.dto,
                            org.osgi.service.servlet.whiteboard,
                            org.eclipse.jetty.alpn.server,
                            org.eclipse.jetty.http.*,
                            org.eclipse.jetty.http2.*,
                            org.eclipse.jetty.io.*,
                            org.eclipse.jetty.jmx.*,
                            org.eclipse.jetty.security.*,
                            org.eclipse.jetty.session.*,
                            org.eclipse.jetty.server.*,
                            org.eclipse.jetty.util.*,
                            org.eclipse.jetty.ee.*,
                            !org.eclipse.jetty.ee10.websocket.*,
                            org.eclipse.jetty.ee10.servlet.*,
                            org.apache.felix.http.jetty,
                            org.apache.felix.http.jakartawrappers,
                            org.apache.felix.http.javaxwrappers
                        </Export-Package>
                        <Private-Package>
                            org.apache.felix.http.base.*,
                            org.apache.felix.http.jetty.*,
                            org.eclipse.jetty.version
                        </Private-Package>
                        <Conditional-Package>
                            org.apache.commons.*
                        </Conditional-Package>
                        <Import-Package>
                            sun.misc;resolution:=optional,
                            sun.nio.ch;resolution:=optional,
                            javax.imageio;resolution:=optional,
                            javax.sql;resolution:=optional,
                            org.ietf.jgss;resolution:=optional,
                            org.osgi.service.cm;resolution:=optional;version="[1.3,2)",
                            org.osgi.service.event;resolution:=optional;version="[1.2,2)",
                            org.osgi.service.log;resolution:=optional;version="[1.3,2)",
                            org.osgi.service.metatype;resolution:=optional;version="[1.1,2)",
                            org.osgi.service.useradmin;resolution:=optional;version="[1.1,2)",
                            org.osgi.service.http;version="[1.2.1,1.3)",
                            org.osgi.service.http.context;version="[1.1,1.2)",
                            org.osgi.service.http.runtime;version="[1.1,1.2)",
                            org.osgi.service.http.runtime.dto;version="[1.1,1.2)",
                            org.slf4j;version="[1.0,3.0)",
                            *
                        </Import-Package>
                        <DynamicImport-Package>
                            org.osgi.service.cm;version="[1.3,2)",
                            org.osgi.service.event;version="[1.2,2)",
                            org.osgi.service.log;version="[1.3,2)",
                            org.osgi.service.metatype;version="[1.4,2)"
                        </DynamicImport-Package>
                        <Provide-Capability>
                            osgi.implementation;osgi.implementation="osgi.http";version:Version="1.1";
                            uses:="javax.servlet,javax.servlet.http,org.osgi.service.http.context,org.osgi.service.http.whiteboard",
                            osgi.implementation;osgi.implementation="osgi.http";version:Version="2.0";
                            uses:="jakarta.servlet,jakarta.servlet.http,org.osgi.service.servlet.context,org.osgi.service.servlet.whiteboard",
                            osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.servlet.runtime.HttpServiceRuntime";
                            uses:="org.osgi.service.servlet.runtime,org.osgi.service.servlet.runtime.dto",
                            osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.http.runtime.HttpServiceRuntime";
                            uses:="org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto",
                            osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.http.HttpService";
                            uses:="org.osgi.service.http",
                            osgi.serviceloader;osgi.serviceloader="org.eclipse.jetty.http.HttpFieldPreEncoder"
                        </Provide-Capability>
                        <Require-Capability>
                            osgi.contract;filter:="(&amp;(osgi.contract=JavaServlet)(version=4.0))",
                            osgi.contract;filter:="(&amp;(osgi.contract=JakartaServlet)(version=6.0))",
                            osgi.extender;filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional,
                            osgi.extender;filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional,
                            osgi.serviceloader;filter:="(osgi.serviceloader=org.eclipse.jetty.http.HttpFieldPreEncoder)";resolution:=optional;cardinality:=multiple,
                            osgi.serviceloader;filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server)";resolution:=optional;cardinality:=multiple
                        </Require-Capability>
                        <Include-Resource>
                            {maven-resources},${project.build.directory}/serviceloader-resources
                        </Include-Resource>
                        <_removeheaders>
                            Private-Package,Conditional-Package,Include-Resource
                        </_removeheaders>
                    </instructions>
                </configuration>
                <executions>
                    <execution>
                        <id>bundle</id>
                        <phase>package</phase>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>baseline</id>
                        <goals>
                          <goal>baseline</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>light-bundle</id>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                        <configuration>
                            <classifier>light</classifier>
                            <instructions>
                               <Bundle-Name>${project.name} Light</Bundle-Name>
                               <Bundle-SymbolicName>${project.artifactId}.light</Bundle-SymbolicName>
                               <!-- We need to override this from the base configuration -->
                               <Conditional-Package>
                                   foo
                               </Conditional-Package>
                               <Export-Package>
                                    org.osgi.service.http,
                                    org.osgi.service.http.context,
                                    org.osgi.service.http.runtime,
                                    org.osgi.service.http.runtime.dto,
                                    org.osgi.service.http.whiteboard,
                                    org.osgi.service.servlet.context,
                                    org.osgi.service.servlet.runtime,
                                    org.osgi.service.servlet.runtime.dto,
                                    org.osgi.service.servlet.whiteboard,
                                    org.apache.felix.http.jetty,
                                    org.apache.felix.http.javaxwrappers,
                                    org.apache.felix.http.jakartawrappers
                                </Export-Package>
                                <Private-Package>
                                    org.apache.felix.http.base.*,
                                    org.apache.felix.http.jetty.*,
                                </Private-Package>
                                <Import-Package>
                                    org.osgi.service.cm;resolution:=optional;version="[1.3,2)",
                                    org.osgi.service.event;resolution:=optional;version="[1.2,2)",
                                    org.osgi.service.log;resolution:=optional;version="[1.3,2)",
                                    org.osgi.service.metatype;resolution:=optional;version="[1.4,2)",
                                    org.osgi.service.useradmin;resolution:=optional;version="[1.1,2)",
                                    org.osgi.service.http;version="[1.2.1,1.3)",
                                    org.osgi.service.http.context;version="[1.1,1.2)",
                                    org.osgi.service.http.runtime;version="[1.1,1.2)",
                                    org.osgi.service.http.runtime.dto;version="[1.1,1.2)",
                                    *
                                </Import-Package>
                                <!-- We need to override this from the base configuration to exclude the ServiceLoader capabilities -->
                                <Provide-Capability>
                                    osgi.implementation;osgi.implementation="osgi.http";version:Version="1.1";
                                    uses:="javax.servlet,javax.servlet.http,org.osgi.service.http.context,org.osgi.service.http.whiteboard",
                                    osgi.implementation;osgi.implementation="osgi.http";version:Version="2.0";
                                    uses:="jakarta.servlet,jakarta.servlet.http,org.osgi.service.servlet.context,org.osgi.service.servlet.whiteboard",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.servlet.runtime.HttpServiceRuntime";
                                    uses:="org.osgi.service.servlet.runtime,org.osgi.service.servlet.runtime.dto",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.http.runtime.HttpServiceRuntime";
                                    uses:="org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.http.HttpService";
                                    uses:="org.osgi.service.http"
                                </Provide-Capability>
                                <!-- We need to override this from the base configuration to exclude the ServiceLoader capabilities -->
                                <Require-Capability>
                                  osgi.contract;filter:="(&amp;(osgi.contract=JavaServlet)(version=4.0))",
                                  osgi.contract;filter:="(&amp;(osgi.contract=JakartaServlet)(version=6.0))"
                                </Require-Capability>
                                <!-- We need to override this from the base configuration to exclude the ServiceLoader resources -->
                                <Include-Resource>
                                    {maven-resources}
                                </Include-Resource>
                                <_removeheaders>
                                    X-Jetty-Version,Private-Package,Conditional-Package,Include-Resource
                                </_removeheaders>
                            </instructions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>with-jetty-websockets</id>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                        <configuration>
                            <classifier>with-jetty-websockets</classifier>
                            <instructions>
                                <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                                <Bundle-Version>${project.version}</Bundle-Version>
                                <X-Jetty-Version>
                                    ${jetty.version}
                                </X-Jetty-Version>
                                <Bundle-Activator>
                                    org.apache.felix.http.jetty.internal.JettyActivator
                                </Bundle-Activator>
                                <Export-Package>
                                    org.osgi.service.http,
                                    org.osgi.service.http.context,
                                    org.osgi.service.http.runtime,
                                    org.osgi.service.http.runtime.dto,
                                    org.osgi.service.http.whiteboard,
                                    org.osgi.service.servlet.context,
                                    org.osgi.service.servlet.runtime,
                                    org.osgi.service.servlet.runtime.dto,
                                    org.osgi.service.servlet.whiteboard,
                                    org.eclipse.jetty.alpn.server,
                                    org.eclipse.jetty.http.*,
                                    org.eclipse.jetty.http2.*,
                                    org.eclipse.jetty.io.*,
                                    org.eclipse.jetty.jmx.*,
                                    org.eclipse.jetty.security.*,
                                    org.eclipse.jetty.session.*,
                                    org.eclipse.jetty.server.*,
                                    org.eclipse.jetty.util.*,
                                    org.eclipse.jetty.ee.*,
                                    org.eclipse.jetty.ee10.servlet.*,
                                    !org.eclipse.jetty.ee10.websocket.jakarta.*,
                                    org.eclipse.jetty.ee10.websocket.*,
                                    org.eclipse.jetty.websocket.*,
                                    org.apache.felix.http.jetty,
                                    org.apache.felix.http.jakartawrappers,
                                    org.apache.felix.http.javaxwrappers
                                </Export-Package>
                                <Private-Package>
                                    org.apache.felix.http.base.*,
                                    org.apache.felix.http.jetty.*,
                                    org.eclipse.jetty.version
                                </Private-Package>
                                <Conditional-Package>
                                    org.apache.commons.*
                                </Conditional-Package>
                                <Import-Package>
                                    org.eclipse.jetty.client;resolution:=optional,
                                    sun.misc;resolution:=optional,
                                    sun.nio.ch;resolution:=optional,
                                    javax.imageio;resolution:=optional,
                                    javax.sql;resolution:=optional,
                                    org.ietf.jgss;resolution:=optional,
                                    org.osgi.service.cm;resolution:=optional;version="[1.3,2)",
                                    org.osgi.service.event;resolution:=optional;version="[1.2,2)",
                                    org.osgi.service.log;resolution:=optional;version="[1.3,2)",
                                    org.osgi.service.metatype;resolution:=optional;version="[1.1,2)",
                                    org.osgi.service.useradmin;resolution:=optional;version="[1.1,2)",
                                    org.osgi.service.http;version="[1.2.1,1.3)",
                                    org.osgi.service.http.context;version="[1.1,1.2)",
                                    org.osgi.service.http.runtime;version="[1.1,1.2)",
                                    org.osgi.service.http.runtime.dto;version="[1.1,1.2)",
                                    org.slf4j;version="[1.0,3.0)",
                                    *
                                </Import-Package>
                                <DynamicImport-Package>
                                    org.osgi.service.cm;version="[1.3,2)",
                                    org.osgi.service.event;version="[1.2,2)",
                                    org.osgi.service.log;version="[1.3,2)",
                                    org.osgi.service.metatype;version="[1.4,2)"
                                </DynamicImport-Package>
                                <Provide-Capability>
                                    osgi.implementation;osgi.implementation="osgi.http";version:Version="1.1";
                                    uses:="javax.servlet,javax.servlet.http,org.osgi.service.http.context,org.osgi.service.http.whiteboard",
                                    osgi.implementation;osgi.implementation="osgi.http";version:Version="2.0";
                                    uses:="jakarta.servlet,jakarta.servlet.http,org.osgi.service.servlet.context,org.osgi.service.servlet.whiteboard",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.servlet.runtime.HttpServiceRuntime";
                                    uses:="org.osgi.service.servlet.runtime,org.osgi.service.servlet.runtime.dto",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.http.runtime.HttpServiceRuntime";
                                    uses:="org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.http.HttpService";
                                    uses:="org.osgi.service.http",
                                    osgi.serviceloader;osgi.serviceloader="org.eclipse.jetty.http.HttpFieldPreEncoder"
                                </Provide-Capability>
                                <Require-Capability>
                                    osgi.contract;filter:="(&amp;(osgi.contract=JavaServlet)(version=4.0))",
                                    osgi.contract;filter:="(&amp;(osgi.contract=JakartaServlet)(version=6.0))",
                                    osgi.extender;filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional,
                                    osgi.extender;filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional,
                                    osgi.serviceloader;filter:="(osgi.serviceloader=org.eclipse.jetty.http.HttpFieldPreEncoder)";resolution:=optional;cardinality:=multiple,
                                    osgi.serviceloader;filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server)";resolution:=optional;cardinality:=multiple
                                </Require-Capability>
                                <Include-Resource>
                                    {maven-resources},${project.build.directory}/serviceloader-resources
                                </Include-Resource>
                                <_removeheaders>
                                    Private-Package,Conditional-Package,Include-Resource
                                </_removeheaders>
                            </instructions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>with-jakarta-websockets</id>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                        <configuration>
                            <classifier>with-jakarta-websockets</classifier>
                            <instructions>
                                <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                                <Bundle-Version>${project.version}</Bundle-Version>
                                <X-Jetty-Version>
                                    ${jetty.version}
                                </X-Jetty-Version>
                                <Bundle-Activator>
                                    org.apache.felix.http.jetty.internal.JettyActivator
                                </Bundle-Activator>
                                <Export-Package>
                                    org.osgi.service.http,
                                    org.osgi.service.http.context,
                                    org.osgi.service.http.runtime,
                                    org.osgi.service.http.runtime.dto,
                                    org.osgi.service.http.whiteboard,
                                    org.osgi.service.servlet.context,
                                    org.osgi.service.servlet.runtime,
                                    org.osgi.service.servlet.runtime.dto,
                                    org.osgi.service.servlet.whiteboard,
                                    org.eclipse.jetty.alpn.server,
                                    org.eclipse.jetty.http.*,
                                    org.eclipse.jetty.http2.*,
                                    org.eclipse.jetty.io.*,
                                    org.eclipse.jetty.jmx.*,
                                    org.eclipse.jetty.security.*,
                                    org.eclipse.jetty.session.*,
                                    org.eclipse.jetty.server.*,
                                    org.eclipse.jetty.util.*,
                                    org.eclipse.jetty.ee.*,
                                    !org.eclipse.jetty.ee10.websocket.server.*,
                                    !org.eclipse.jetty.ee10.websocket.servlet.*,
                                    org.eclipse.jetty.ee10.websocket.jakarta.*,
                                    org.eclipse.jetty.ee10.servlet.*,
                                    org.eclipse.jetty.websocket.*,
                                    org.apache.felix.http.jetty,
                                    org.apache.felix.http.jakartawrappers,
                                    org.apache.felix.http.javaxwrappers
                                </Export-Package>
                                <Private-Package>
                                    org.apache.felix.http.base.*,
                                    org.apache.felix.http.jetty.*,
                                    org.eclipse.jetty.version
                                </Private-Package>
                                <Conditional-Package>
                                    org.apache.commons.*
                                </Conditional-Package>
                                <Import-Package>
                                    org.eclipse.jetty.client;resolution:=optional,
                                    sun.misc;resolution:=optional,
                                    sun.nio.ch;resolution:=optional,
                                    javax.imageio;resolution:=optional,
                                    javax.sql;resolution:=optional,
                                    org.ietf.jgss;resolution:=optional,
                                    org.osgi.service.cm;resolution:=optional;version="[1.3,2)",
                                    org.osgi.service.event;resolution:=optional;version="[1.2,2)",
                                    org.osgi.service.log;resolution:=optional;version="[1.3,2)",
                                    org.osgi.service.metatype;resolution:=optional;version="[1.1,2)",
                                    org.osgi.service.useradmin;resolution:=optional;version="[1.1,2)",
                                    org.osgi.service.http;version="[1.2.1,1.3)",
                                    org.osgi.service.http.context;version="[1.1,1.2)",
                                    org.osgi.service.http.runtime;version="[1.1,1.2)",
                                    org.osgi.service.http.runtime.dto;version="[1.1,1.2)",
                                    org.slf4j;version="[1.0,3.0)",
                                    *
                                </Import-Package>
                                <DynamicImport-Package>
                                    org.osgi.service.cm;version="[1.3,2)",
                                    org.osgi.service.event;version="[1.2,2)",
                                    org.osgi.service.log;version="[1.3,2)",
                                    org.osgi.service.metatype;version="[1.4,2)"
                                </DynamicImport-Package>
                                <Provide-Capability>
                                    osgi.implementation;osgi.implementation="osgi.http";version:Version="1.1";
                                    uses:="javax.servlet,javax.servlet.http,org.osgi.service.http.context,org.osgi.service.http.whiteboard",
                                    osgi.implementation;osgi.implementation="osgi.http";version:Version="2.0";
                                    uses:="jakarta.servlet,jakarta.servlet.http,org.osgi.service.servlet.context,org.osgi.service.servlet.whiteboard",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.servlet.runtime.HttpServiceRuntime";
                                    uses:="org.osgi.service.servlet.runtime,org.osgi.service.servlet.runtime.dto",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.http.runtime.HttpServiceRuntime";
                                    uses:="org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto",
                                    osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.http.HttpService";
                                    uses:="org.osgi.service.http",
                                    osgi.serviceloader;osgi.serviceloader="org.eclipse.jetty.http.HttpFieldPreEncoder"
                                </Provide-Capability>
                                <Require-Capability>
                                    osgi.contract;filter:="(&amp;(osgi.contract=JavaServlet)(version=4.0))",
                                    osgi.contract;filter:="(&amp;(osgi.contract=JakartaServlet)(version=6.0))",
                                    osgi.extender;filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional,
                                    osgi.extender;filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional,
                                    osgi.serviceloader;filter:="(osgi.serviceloader=org.eclipse.jetty.http.HttpFieldPreEncoder)";resolution:=optional;cardinality:=multiple,
                                    osgi.serviceloader;filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Server)";resolution:=optional;cardinality:=multiple
                                </Require-Capability>
                                <Include-Resource>
                                    {maven-resources},${project.build.directory}/serviceloader-resources
                                </Include-Resource>
                                <_removeheaders>
                                    Private-Package,Conditional-Package,Include-Resource
                                </_removeheaders>
                            </instructions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                </configuration>
            </plugin>
            <!-- plugins for paxexam integration tests -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>verify</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <systemPropertyVariables>
                        <jetty.version>${jetty.version}</jetty.version>
                        <bundle.filename>${basedir}/target/${project.build.finalName}.jar</bundle.filename>
                        <pax.vm.options>${pax.vm.options}</pax.vm.options>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.core</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.cm</artifactId>
            <version>1.5.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.event</artifactId>
            <version>1.3.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.metatype</artifactId>
            <version>1.4.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.useradmin</artifactId>
            <version>1.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.ee10</groupId>
            <artifactId>jetty-ee10-servlet</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-util</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-util-ajax</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-jmx</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-security</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.http2</groupId>
            <artifactId>jetty-http2-server</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.http2</groupId>
            <artifactId>jetty-http2-common</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.http2</groupId>
            <artifactId>jetty-http2-hpack</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-alpn-server</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.ee10.websocket</groupId>
            <artifactId>jetty-ee10-websocket-jakarta-server</artifactId>
            <version>${jetty.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.ee10.websocket</groupId>
            <artifactId>jetty-ee10-websocket-jetty-server</artifactId>
            <version>${jetty.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>jetty-websocket-jetty-server</artifactId>
            <version>${jetty.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-session</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.servlet</artifactId>
            <version>2.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.http</artifactId>
            <version>1.2.1</version>
           <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.http.whiteboard</artifactId>
            <version>1.1.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.http.base</artifactId>
            <version>5.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.http.wrappers</artifactId>
            <version>1.1.8</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.5</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.14.0</version>
        </dependency>
    <!-- Testing -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.log</artifactId>
            <version>1.3.0</version>
            <scope>test</scope>
        </dependency>

        <!-- an OSGi framework -->
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.framework</artifactId>
            <version>7.0.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
            <scope>test</scope>
        </dependency>

        <!-- Pax Exam -->
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam</artifactId>
            <version>${org.ops4j.pax.exam.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-cm</artifactId>
            <version>${org.ops4j.pax.exam.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-container-forked</artifactId>
            <version>${org.ops4j.pax.exam.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-junit4</artifactId>
            <version>${org.ops4j.pax.exam.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-link-mvn</artifactId>
            <version>${org.ops4j.pax.exam.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-client</artifactId>
            <version>${jetty.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>jetty-websocket-jetty-client</artifactId>
            <version>${jetty.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.awaitility</groupId>
            <artifactId>awaitility</artifactId>
            <version>4.2.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>