<?xml version="1.0" encoding="UTF-8"?>
<!--
  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>
    <artifactId>cxf-integration-cdi</artifactId>
    <packaging>bundle</packaging>
    <name>Apache CXF CDI Integration</name>
    <description>Apache CXF CDI Integration</description>
    <url>http://cxf.apache.org</url>
    <parent>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-parent</artifactId>
        <version>3.1.17</version>
        <relativePath>../../parent/pom.xml</relativePath>
    </parent>
    
    <properties>
        <cxf.osgi.import>
            javax.servlet*;version="${cxf.osgi.javax.servlet.version}",
            javax.enterprise*;version="[${cxf.cdi.api.version},2)",
            javax.ws.rs*;version="[1.0,3)",
            org.apache.cxf.interceptor;resolution:=optional,
            *          
        </cxf.osgi.import>
        <cxf.osgi.export>
            org.apache.cxf.cdi
        </cxf.osgi.export>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>javax.enterprise</groupId>
            <artifactId>cdi-api</artifactId>
        </dependency>                
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${cxf.servlet-api.group}</groupId>
            <artifactId>${cxf.servlet-api.artifact}</artifactId>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.1.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <!-- Generate Manifest file required for OSGI bundles -->
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${cxf.osgi.symbolic.name}</Bundle-SymbolicName>
                        <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
                        <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
                        <Implementation-Version>${cxf.osgi.version.clean}</Implementation-Version>
                        <Specification-Vendor>The Apache Software Foundation</Specification-Vendor>
                        <Specification-Version>${cxf.osgi.version.clean}</Specification-Version>
                        <Bundle-DocURL>http://cxf.apache.org</Bundle-DocURL>
                        <Fragment-Host>${cxf.fragment.host}</Fragment-Host>
                        <_failok>true</_failok>
                        <_nouses>true</_nouses>
                        <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
                        <Export-Package>${cxf.osgi.export}</Export-Package>
                        <Import-Package>
                            ${cxf.osgi.import}
                        </Import-Package>
                        <DynamicImport-Package>
                            ${cxf.osgi.dynamic.import}
                        </DynamicImport-Package>
                        <Require-Capability>
                            osgi.extender;filter:="(osgi.extender=pax.cdi)"
                        </Require-Capability>
                        <Provide-Capability>
                            org.ops4j.pax.cdi.extension; extension="cxf-integration-cdi"
                        </Provide-Capability>        
                    </instructions>
                </configuration>
            </plugin>            
        </plugins>
    </build>
</project>
