<?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>
  
    <parent>
        <groupId>org.apache.felix.commons</groupId>
        <artifactId>commons-build</artifactId>
        <version>1.0.1-SNAPSHOT</version>
        <relativePath>../pom</relativePath>
    </parent>
    
  <properties>
    <pkgArtifactId>xml-apis</pkgArtifactId>
    <pkgVersion>1.3.4</pkgVersion>
    <realPkgVersion>1.3.04</realPkgVersion>
    <pomVersion>0002</pomVersion>
    <osgiVersion>${pkgVersion}</osgiVersion>
  </properties>
  
  <groupId>org.apache.felix.commons</groupId>
  <artifactId>${pom.groupId}.${pkgArtifactId}</artifactId>
  <version>${osgiVersion}-${pomVersion}-SNAPSHOT</version>
  <packaging>bundle</packaging>
    
  <name>${pkgArtifactId} bundle</name>
    <description>
        This bundle simply wraps ${pkgArtifactId}-${realPkgVersion}.jar.
    </description>

    <organization>
        <name>Apache Felix Project</name>
        <url>http://felix.apache.org/</url>
    </organization>

    <scm>
      <connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/commons/xml-apis</connection>
      <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/commons/xml-apis</developerConnection>
      <url>http://svn.apache.org/viewcvs/felix/trunk/commons/xml-apis</url>
    </scm>

    <dependencies>
        <dependency>
            <groupId>${pkgArtifactId}</groupId>
            <artifactId>${pkgArtifactId}</artifactId>
            <version>${realPkgVersion}</version>
      </dependency>
      <dependency>
        <groupId>xalan</groupId>
        <artifactId>xalan</artifactId>
        <version>2.7.0</version>
      </dependency>
      <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.8.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.bcel</groupId>
        <artifactId>bcel</artifactId>
        <version>5.2</version>
      </dependency>
        <dependency>
            <groupId>xml-resolver</groupId>
            <artifactId>xml-resolver</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>
                            ${pom.artifactId}
                        </Bundle-SymbolicName>
                        <Import-Package>org.xml.sax.*, org.w3c.dom.*, javax.xml.*, org.apache.xml.resolver.*,javax.swing,javax.swing.border,javax.swing.event</Import-Package>
                        <Export-Package>
                            org.xml.sax.*, org.w3c.dom.*, javax.xml.*, org.apache.xml.resolver.*
                        </Export-Package>
                        <Private-Package>
                          org.apache.xalan.*,org.apache.xml.*,org.apache.xpath.*,org.apache.html.dom,
                          org.apache.wml.*,org.apache.xerces.*,java_cup.runtime,
                          org.apache.bcel.*,org.apache.env.*
                        </Private-Package>
                        <Include-Resource>
                          src/main/resources,
                          @xercesImpl-2.8.1.jar!/META-INF/services/**,
                          @xalan-2.7.0.jar!/META-INF/services/**
                        </Include-Resource>
                        <DynamicImport-Package>javax.naming</DynamicImport-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
