<!--
  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.0</version>
    <relativePath>../../pom/pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>bundle</packaging>
  <name>Apache Felix iPOJO White Board Pattern Handler</name>
  <artifactId> org.apache.felix.ipojo.handler.whiteboard </artifactId>
  <groupId>org.apache.felix</groupId>
  <version>1.5.0-SNAPSHOT</version>
  
  <description>
  iPOJO extension to easily implement a white-board pattern (host).
  </description>
  <url>
  http://felix.apache.org/site/white-board-pattern-handler.html
  </url>
  
  <dependencies>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.ipojo</artifactId>
      <version>1.4.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>1.0.1</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-Name>${pom.name}</Bundle-Name>
            <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
            <Bundle-Vendor> The Apache Software Foundation </Bundle-Vendor>
            <Bundle-Description> iPOJO White-Board Pattern Handler
            </Bundle-Description>
            <Bundle-DocURL>
              http://felix.apache.org/site/white-board-pattern-handler.html
            </Bundle-DocURL>
            <Private-Package> org.apache.felix.ipojo.handler.wbp
            </Private-Package>
            <Bundle-Name>${pom.name}</Bundle-Name>
            <Include-Resource> META-INF/LICENSE=LICENSE,
              META-INF/NOTICE=NOTICE </Include-Resource>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-ipojo-plugin</artifactId>
        <version>1.4.0</version>
        <executions>
          <execution>
            <goals>
              <goal>ipojo-bundle</goal>
            </goals>
            <configuration>
              <metadata>metadata.xml</metadata>
            </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>
          </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>
  </build>
</project>
