<?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.

-->

<!-- $Rev: 1454287 $ $Date: 2013-03-08 09:41:25 +0100 (Fri, 08 Mar 2013) $ -->

<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>
        <artifactId>xbean</artifactId>
        <groupId>org.apache.xbean</groupId>
        <version>4.5</version>
    </parent>
    <artifactId>xbean-asm5-shaded</artifactId>
    <packaging>bundle</packaging>
    <name>Apache XBean :: ASM 5 shaded (repackaged)</name>

    <description>Repackaged and shaded asm 5.x jars</description>
    <licenses>
        <license>
            <url>http://asm.ow2.org/license.html</url>
        </license>
        <license>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>

    <properties>
        <xbean.osgi.export>
            org.apache.xbean.asm5.shade.commons;version=${asm.version},
            org.apache.xbean.asm5;version=${asm.version},
            org.apache.xbean.asm5.signature;version=${asm.version},
            org.apache.xbean.asm5.commons;version=${asm.version},
            org.apache.xbean.asm5.tree;version=${asm.version}
        </xbean.osgi.export>
        <xbean.osgi.import>
            org.apache.xbean.asm5.shade.commons;version="[${asm.version},${asm.version}]",
            org.apache.xbean.asm5;version="[${asm.version},${asm.version}]",
            org.apache.xbean.asm5.signature;version="[${asm.version},${asm.version}]",
            org.apache.xbean.asm5.commons;version="[${asm.version},${asm.version}]",
            org.apache.xbean.asm5.tree;version="[${asm.version},${asm.version}]"
        </xbean.osgi.import>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <createSourcesJar>true</createSourcesJar>
                            <relocations>
                                <relocation> <!-- we need a different package because we build against both -->
                                    <pattern>org.apache.xbean.asm5.original.commons</pattern>
                                    <shadedPattern>org.apache.xbean.asm5.shade.commons</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.objectweb.asm</pattern>
                                    <shadedPattern>org.apache.xbean.asm5</shadedPattern>
                                </relocation>
                            </relocations>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Bundle-License>http://asm.ow2.org/license.html</Bundle-License>
                                        <Bundle-SymbolicName>org.apache.xbean.asm5-shaded</Bundle-SymbolicName>
                                        <Export-Package>${xbean.osgi.export}</Export-Package>
                                        <Import-Package>${xbean.osgi.import}</Import-Package>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>${asm.version}</version>
        </dependency>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-commons</artifactId>
            <version>${asm.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xbean</groupId>
            <artifactId>xbean-asm-util</artifactId>
            <version>${project.version}</version>
        </dependency>
      </dependencies>
</project>
