<!--
  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/xsd/maven-4.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>
  <artifactId>org.apache.felix.ipojo.ant</artifactId>
  <groupId>org.apache.felix</groupId>
  <version>1.5.0-SNAPSHOT</version>
  <packaging>bundle</packaging>
  <name>Apache Felix iPOJO Ant Task</name>
  
  <description>
  Ant task to package iPOJO-powered bundles.
  </description>
  <url>
  http://felix.apache.org/site/ipojo-ant-task.html
  </url>
  
  <dependencies>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.ipojo.metadata</artifactId>
	  <version>1.4.0</version>
	</dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
      <version>${pom.version}</version>
    </dependency>
    <dependency>
      <groupId>xerces</groupId>
      <artifactId>xercesImpl</artifactId>
      <version>2.9.1</version>
    </dependency>
    <dependency>
      <groupId>ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.6.5</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>1.4.3</version>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-Name>iPOJO Ant Task</Bundle-Name>
            <Bundle-Vendor> The Apache Software Foundation </Bundle-Vendor>
            <Bundle-Description> iPOJO Ant Task </Bundle-Description>
            <Bundle-DocURL>http://felix.apache.org/site/ipojo-ant-task.html</Bundle-DocURL>
            <Private-Package> org.apache.felix.ipojo.metadata,
              org.apache.felix.ipojo.manipulator,
              org.apache.felix.ipojo.xml.parser,
              org.apache.felix.ipojo.manipulation*,
              org.objectweb.asm.util;-split-package:=merge-first,
              org.objectweb.asm;-split-package:=merge-first,
              org.objectweb.asm.commons;-split-package:=merge-first,
              org.apache.xerces.parsers, org.apache.xerces.xni*,
              org.apache.xerces.impl*, org.apache.xerces.util.*,
              org.apache.xerces.dom.*, org.apache.xerces.dom3.*
            </Private-Package>
            <Export-Package> org.apache.felix.ipojo.task </Export-Package>
            <Include-Resource> META-INF/LICENSE=LICENSE,
              META-INF/NOTICE=NOTICE, META-INF/LICENSE.asm=LICENSE.asm
            </Include-Resource>
            <Import-Package>!org.objectweb.asm.signature, !org.objectweb.asm.tree, !org.objectweb.asm.tree.analysis, *</Import-Package>
          </instructions>
          <obrRepository>NONE</obrRepository>
        </configuration>
      </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>
