<!--
   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.34</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.34</tag>
 </scm>

   <properties>
       <felix.java.version>17</felix.java.version>
       <jetty.version>12.0.21</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)",
                           *
                       </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)",
                                   *
                               </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)",
                                   *
                               </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>org.slf4j</groupId>
           <artifactId>slf4j-api</artifactId>
           <version>2.0.17</version>
           <scope>provided</scope>
       </dependency>
       <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.14</version>
       </dependency>
       <dependency>
           <groupId>org.apache.felix</groupId>
           <artifactId>org.apache.felix.http.wrappers</artifactId>
           <version>6.1.0</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.19.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.17.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.17</version>
           <scope>test</scope>
       </dependency>
   </dependencies>
</project>