<!--
    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>12</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>4.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.jetty-4.0.20</tag>
  </scm>
    
    <properties>
        <!-- Skip because of problems with Java 8 -->
        <animal.sniffer.skip>true</animal.sniffer.skip>
        <felix.java.version>8</felix.java.version>
        <jetty.version>9.4.30.v20200611</jetty.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <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.eclipse.jetty,
                            !org.eclipse.jetty.util.log.jmx,
                            !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.security.authentication,
                            org.eclipse.jetty.util.log.jmx,
                            org.eclipse.jetty.version
                        </Private-Package>
                        <Conditional-Package>
                            org.apache.commons.*
                        </Conditional-Package>
                        <Import-Package>
                            javax.imageio;resolution:=optional,
                            javax.sql;resolution:=optional,
                            org.slf4j.*;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.1,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.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>
                        <Require-Capability>
                            osgi.contract;filter:="(&amp;(osgi.contract=JavaServlet)(version=3.1))"
                        </Require-Capability>
                        <_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.apache.felix.http.jetty
                                </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.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.eclipse.jetty.webapp;resolution:=optional,
                                    *
                                </Import-Package>
                                <_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.3.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-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.websocket</groupId>
            <artifactId>websocket-servlet</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-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>4.0.10</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</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>
