<!--
 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">
  <parent>
    <groupId>org.apache.felix</groupId>
    <artifactId>felix-parent</artifactId>
    <version>6</version>
    <relativePath>../pom/pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>bundle</packaging>
  <name>Apache Felix Framework</name>
  <artifactId>org.apache.felix.framework</artifactId>
  <version>7.1.0-SNAPSHOT</version>
  <properties>
    <dollar>$</dollar>
    <felix.java.version>8</felix.java.version>
  </properties>
  <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.framework-7.0.2</tag>
  </scm>

  <build>
    <plugins>
      <plugin>
        <groupId>org.moditect</groupId>
        <artifactId>moditect-maven-plugin</artifactId>
        <version>1.0.0.RC1</version>
        <executions>
          <execution>
            <id>add-module-infos</id>
            <phase>package</phase>
            <goals>
              <goal>add-module-info</goal>
            </goals>
            <configuration>
              <module>
              <moduleInfoSource>
                open module org.apache.felix.framework {
                    requires jdk.unsupported;

                    exports org.apache.felix.framework.ext;
                    exports org.osgi.dto;
                    exports org.osgi.framework;
                    exports org.osgi.framework.connect;
                    exports org.osgi.framework.dto;
                    exports org.osgi.framework.hooks.bundle;
                    exports org.osgi.framework.hooks.resolver;
                    exports org.osgi.framework.hooks.service;
                    exports org.osgi.framework.hooks.weaving;
                    exports org.osgi.framework.launch;
                    exports org.osgi.framework.namespace;
                    exports org.osgi.framework.startlevel;
                    exports org.osgi.framework.startlevel.dto;
                    exports org.osgi.framework.wiring;
                    exports org.osgi.framework.wiring.dto;
                    exports org.osgi.resource;
                    exports org.osgi.resource.dto;
                    exports org.osgi.service.condition;
                    exports org.osgi.service.packageadmin;
                    exports org.osgi.service.resolver;
                    exports org.osgi.service.startlevel;
                    exports org.osgi.service.url;
                    exports org.osgi.util.tracker;
                    provides org.osgi.framework.launch.FrameworkFactory with
                      org.apache.felix.framework.FrameworkFactory;
                    provides org.osgi.framework.connect.ConnectFrameworkFactory with
                      org.apache.felix.framework.FrameworkFactory;

                    uses org.apache.felix.framework.ext.ClassPathExtenderFactory;
                    uses org.osgi.framework.connect.FrameworkUtilHelper;
                    }
                </moduleInfoSource>
              </module>
              <overwriteExistingFiles>true</overwriteExistingFiles>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>5.1.1</version>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-SymbolicName>org.apache.felix.framework</Bundle-SymbolicName>
            <Bundle-Name>Apache Felix Framework</Bundle-Name>
            <Bundle-Description>OSGi R8 framework implementation.</Bundle-Description>
            <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
            <Export-Package>
                org.osgi.framework.*;-split-package:=first,
                org.osgi.resource;-split-package:=first,
                org.osgi.resource.dto;-split-package:=first,                
                org.osgi.service.packageadmin;-split-package:=first,
                org.osgi.service.startlevel;-split-package:=first,
                org.osgi.service.url;-split-package:=first,
                org.osgi.service.resolver,
                org.osgi.util.tracker;-split-package:=first,
                org.osgi.dto;-split-package:=first,
                org.osgi.service.condition;-split-package:=first
            </Export-Package>
            <Private-Package>org.apache.felix.framework.*, org.apache.felix.resolver.*</Private-Package>
            <Import-Package>!*</Import-Package>
            <Provide-Capability>
                osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.packageadmin.PackageAdmin",
                osgi.service;objectClass:List&lt;String&gt;="org.osgi.service.startlevel.StartLevel"
            </Provide-Capability>
              <Add-opens>
                  java.base/java.net java.base/sun.net.www.protocol.file java.base/sun.net.www.protocol.ftp java.base/sun.net.www.protocol.http java.base/sun.net.www.protocol.https java.base/sun.net.www.protocol.jar java.base/sun.net.www.protocol.jmod java.base/sun.net.www.protocol.mailto java.base/sun.net.www.protocol.jrt java.base/jdk.internal.loader java.base/java.security
              </Add-opens>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
              <execution>
                  <phase>verify</phase>
                  <goals>
                      <goal>check</goal>
                  </goals>
              </execution>
          </executions>
          <configuration>
              <includes>
                  <include>src/**</include>
              </includes>
              <excludes>
                  <exclude>src/main/appended-resources/**</exclude>
                  <exclude>src/**/packageinfo</exclude>
                  <exclude>src/main/resources/META-INF/**</exclude>
                  <exclude>src/main/resources/org/apache/felix/framework/Felix.properties</exclude>
              </excludes>
            </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <configuration>
                <failOnError>false</failOnError>
            </configuration>
      </plugin>
    </plugins>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
        <exclude>**/*.bytes</exclude>
        </excludes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
          <include>**/*.bytes</include>
        </includes>
      </resource>
    </resources>
  </build>
  <dependencies>
    <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.annotation</artifactId>
       <version>6.0.0</version>
       <scope>provided</scope>
    </dependency>
    <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.resolver</artifactId>
       <version>2.0.4</version>
       <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>org.osgi</groupId>
                <artifactId>org.osgi.core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm-all</artifactId>
        <version>5.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>2.5.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.10.19</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
      <dependency>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>animal-sniffer-annotations</artifactId>
          <version>1.9</version>
      </dependency>
  </dependencies>
</project>
