| <!-- |
| 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>org.apache.felix.http.parent</artifactId> |
| <version>13</version> |
| <relativePath>../parent/pom.xml</relativePath> |
| </parent> |
| |
| <name>Apache Felix Http Jetty</name> |
| <description>This is an implementation of the R7 OSGi Http Service and the R7 OSGi Http Whiteboard Specification</description> |
| |
| <artifactId>org.apache.felix.http.jetty</artifactId> |
| <version>5.0.0-SNAPSHOT</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>HEAD</tag> |
| </scm> |
| |
| <properties> |
| <felix.java.version>11</felix.java.version> |
| <jetty.version>11.0.7</jetty.version> |
| </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() )) { |
| 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>5.1.4</version> |
| <extensions>true</extensions> |
| <configuration> |
| <instructions> |
| <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, |
| !org.eclipse.jetty.version, |
| org.eclipse.jetty.*, |
| org.apache.felix.http.jetty |
| </Export-Package> |
| <Private-Package> |
| org.apache.felix.http.base.*, |
| org.apache.felix.http.jetty.*, |
| org.eclipse.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=5.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 |
| </_removeheaders> |
| </instructions> |
| <!-- Skip Baselining due to Jetty API --> |
| <skip>true</skip> |
| </configuration> |
| <executions> |
| <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.*, |
| org.apache.felix.http.jetty |
| </Export-Package> |
| <Private-Package> |
| org.apache.felix.http.base.*, |
| org.apache.felix.http.jetty.*, |
| org.osgi.service.servlet.* |
| </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)", |
| org.eclipse.jetty.webapp;resolution:=optional, |
| * |
| </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=5.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 |
| </_removeheaders> |
| </instructions> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| |
| <dependencies> |
| <dependency> |
| <groupId>javax.servlet</groupId> |
| <artifactId>javax.servlet-api</artifactId> |
| </dependency> |
| <dependency> |
| <groupId>org.osgi</groupId> |
| <artifactId>osgi.core</artifactId> |
| </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</groupId> |
| <artifactId>jetty-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</groupId> |
| <artifactId>jetty-webapp</artifactId> |
| <version>${jetty.version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.eclipse.jetty.http2</groupId> |
| <artifactId>http2-server</artifactId> |
| <version>${jetty.version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.eclipse.jetty.http2</groupId> |
| <artifactId>http2-common</artifactId> |
| <version>${jetty.version}</version> |
| </dependency> |
| <dependency> |
| <groupId>org.eclipse.jetty.http2</groupId> |
| <artifactId>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.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.0</version> |
| <scope>provided</scope> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.felix</groupId> |
| <artifactId>org.apache.felix.http.base</artifactId> |
| <version>5.0.0-SNAPSHOT</version> |
| </dependency> |
| <dependency> |
| <groupId>commons-fileupload</groupId> |
| <artifactId>commons-fileupload</artifactId> |
| <version>1.4</version> |
| </dependency> |
| <dependency> |
| <groupId>commons-io</groupId> |
| <artifactId>commons-io</artifactId> |
| <version>2.11.0</version> |
| </dependency> |
| <!-- Testing --> |
| <dependency> |
| <groupId>org.osgi</groupId> |
| <artifactId>org.osgi.service.log</artifactId> |
| <version>1.3.0</version> |
| <scope>test</scope> |
| </dependency> |
| </dependencies> |
| </project> |