<!-- 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<String>="org.osgi.service.servlet.runtime.HttpServiceRuntime"; uses:="org.osgi.service.servlet.runtime,org.osgi.service.servlet.runtime.dto", osgi.service;objectClass:List<String>="org.osgi.service.http.runtime.HttpServiceRuntime"; uses:="org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto", osgi.service;objectClass:List<String>="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:="(&(osgi.contract=JavaServlet)(version=4.0))", osgi.contract;filter:="(&(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<String>="org.osgi.service.servlet.runtime.HttpServiceRuntime"; uses:="org.osgi.service.servlet.runtime,org.osgi.service.servlet.runtime.dto", osgi.service;objectClass:List<String>="org.osgi.service.http.runtime.HttpServiceRuntime"; uses:="org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto", osgi.service;objectClass:List<String>="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:="(&(osgi.contract=JavaServlet)(version=4.0))", osgi.contract;filter:="(&(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<String>="org.osgi.service.servlet.runtime.HttpServiceRuntime"; uses:="org.osgi.service.servlet.runtime,org.osgi.service.servlet.runtime.dto", osgi.service;objectClass:List<String>="org.osgi.service.http.runtime.HttpServiceRuntime"; uses:="org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto", osgi.service;objectClass:List<String>="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:="(&(osgi.contract=JavaServlet)(version=4.0))", osgi.contract;filter:="(&(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<String>="org.osgi.service.servlet.runtime.HttpServiceRuntime"; uses:="org.osgi.service.servlet.runtime,org.osgi.service.servlet.runtime.dto", osgi.service;objectClass:List<String>="org.osgi.service.http.runtime.HttpServiceRuntime"; uses:="org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto", osgi.service;objectClass:List<String>="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:="(&(osgi.contract=JavaServlet)(version=4.0))", osgi.contract;filter:="(&(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>