<!--
  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>1.2.1</version>
    <relativePath>../../pom/pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>bundle</packaging>
  <name>Apache Felix iPOJO</name>
  <artifactId>org.apache.felix.ipojo</artifactId>
  <version>1.9.0-SNAPSHOT</version>

  <properties>
    <!--
        1.8.1:
        * change in the MethodInterceptor interface (FELIX-3144)
        * change in the Factory interface (FELIX-3190)
     -->
    <ipojo.package.version>1.8.1</ipojo.package.version>

    <!-- Embedded manipulator version -->
    <ipojo.manipulator.version>1.8.0</ipojo.manipulator.version>
  </properties>

  <description>
  iPOJO Core bundle
  </description>
  <url>
  http://ipojo.org
  </url>

  <dependencies>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>4.3.0</version>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.compendium</artifactId>
      <version>4.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.ipojo.metadata</artifactId>
      <version>1.5.0-SNAPSHOT</version>
    </dependency>
     <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
      <version>${ipojo.manipulator.version}</version>
    </dependency>
    <dependency>
      <groupId>asm</groupId>
      <artifactId>asm-all</artifactId>
      <version>3.3.1</version>
      <exclusions>
        <exclusion>
          <groupId>asm</groupId>
          <artifactId>asm-tree</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <target>jsr14</target>
          <source>1.5</source>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>1.4.3</version>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-Name>Apache Felix iPOJO</Bundle-Name>
            <Bundle-Vendor> The Apache Software Foundation </Bundle-Vendor>
            <Bundle-SymbolicName>org.apache.felix.ipojo;singleton:=true</Bundle-SymbolicName>
            <Bundle-Description> iPOJO Core Framework </Bundle-Description>
            <Bundle-Activator> org.apache.felix.ipojo.Extender
            </Bundle-Activator>
            <Bundle-DocURL>
              http://felix.apache.org/site/apache-felix-ipojo.html
            </Bundle-DocURL>
            <IPOJO-Extension>
              component:org.apache.felix.ipojo.ComponentFactory,
              handler:org.apache.felix.ipojo.HandlerManagerFactory
            </IPOJO-Extension>
            <Import-Package>
              org.osgi.framework;version=1.3, <!-- To support KF 2 -->
              org.osgi.service.cm,
              org.osgi.service.log,
              !org.objectweb.asm.tree,
              !sun.io,
              !net.sourceforge.cobertura.*, <!--  To support code coverage -->

              <!--
                Packages used for the online-manipulator.
                They are optionals
              -->
              javax.xml.parsers;resolution:=optional,
              org.osgi.service.url;resolution:=optional,
              org.w3c.dom;resolution:=optional,
              org.xml.sax;resolution:=optional,
              org.xml.sax.helpers;resolution:=optional
            </Import-Package>
            <Private-Package>
              org.apache.felix.ipojo.handlers.architecture,
              org.apache.felix.ipojo.handlers.lifecycle.callback,
              org.apache.felix.ipojo.handlers.lifecycle.controller,
              <!-- ASM (Manipulator dependencies) -->
              org.objectweb.asm.commons,
              org.objectweb.asm.signature,
              org.objectweb.asm
            </Private-Package>
            <Export-Package>
              org.apache.felix.ipojo; version="${ipojo.package.version}",
              org.apache.felix.ipojo.metadata; version="${ipojo.package.version}",
              org.apache.felix.ipojo.architecture; version="${ipojo.package.version}",
              org.apache.felix.ipojo.parser; version="${ipojo.package.version}",
              org.apache.felix.ipojo.util; version="${ipojo.package.version}",
              org.apache.felix.ipojo.handlers.dependency; version="${ipojo.package.version}",
              org.apache.felix.ipojo.handlers.providedservice.*; version="${ipojo.package.version}",
              org.apache.felix.ipojo.handlers.configuration; version="${ipojo.package.version}",
              org.apache.felix.ipojo.context; version="${ipojo.package.version}",
              <!-- Embedded manipulator -->
              org.apache.felix.ipojo.manipulator; version="${ipojo.manipulator.version}",
              org.apache.felix.ipojo.xml.parser; version="${ipojo.manipulator.version}",
              org.apache.felix.ipojo.*; version="${ipojo.manipulator.version}",
              <!-- Compendium packages -->
              org.osgi.service.cm,
              org.osgi.service.log,
            </Export-Package>
            <Include-Resource>
              META-INF/LICENSE=LICENSE,
              META-INF/NOTICE=NOTICE, META-INF/LICENSE.asm=LICENSE.asm,
              META-INF/DEPENDENCIES=DEPENDENCIES
            </Include-Resource>
            <_donotcopy> (CVS|.svn|.+.bak|~.+|metadata.xml) </_donotcopy>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-ipojo-plugin</artifactId>
        <version>1.8.0</version>
        <executions>
          <execution>
            <goals>
              <goal>ipojo-bundle</goal>
            </goals>
            <configuration>
              <ignoreAnnotations>true</ignoreAnnotations>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>rat-maven-plugin</artifactId>
        <configuration>
          <excludeSubProjects>false</excludeSubProjects>
          <useEclipseDefaultExcludes>true</useEclipseDefaultExcludes>
          <useMavenDefaultExcludes>true</useMavenDefaultExcludes>
          <excludes>
            <param>doc/**/*</param>
            <param>maven-eclipse.xml</param>
            <param>.checkstyle</param>
            <param>.externalToolBuilders/*</param>
            <param>LICENSE.asm</param>
            <param>.fbprefs</param>
            <param>DEPENDENCIES</param>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
          <enableRulesSummary>false</enableRulesSummary>
          <violationSeverity>warning</violationSeverity>
          <configLocation>http://felix.apache.org/ipojo/dev/checkstyle_ipojo.xml</configLocation>
        </configuration>
      </plugin>
    </plugins>

    <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
    <resource>
      <directory>.</directory>
      <targetPath>META-INF</targetPath>
      <includes>
        <include>LICENSE*</include>
        <include>NOTICE*</include>
        <include>DEPENDENCIES*</include>
      </includes>
    </resource>
  </resources>

  </build>
</project>
