<?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.17</version>
    </parent>
    <artifactId>xbean-asm8-shaded</artifactId>
    <packaging>bundle</packaging>
    <name>Apache XBean :: ASM shaded (repackaged)</name>

    <description>Repackaged and shaded asm 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.asm8.shade.commons;version=${asm.version},org.apache.xbean.asm8;version=${asm.version},org.apache.xbean.asm8.signature;version=${asm.version},org.apache.xbean.asm8.commons;version=${asm.version},org.apache.xbean.asm8.tree;version=${asm.version}</xbean.osgi.export>
        <xbean.osgi.import>org.apache.xbean.asm8.shade.commons;version="[${asm.version},${asm.version}]",org.apache.xbean.asm8;version="[${asm.version},${asm.version}]",org.apache.xbean.asm8.signature;version="[${asm.version},${asm.version}]",org.apache.xbean.asm8.commons;version="[${asm.version},${asm.version}]",org.apache.xbean.asm8.tree;version="[${asm.version},${asm.version}]"</xbean.osgi.import>
        <xbean.automatic.module.name>${project.groupId}.asm8.shaded</xbean.automatic.module.name>
    </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.asm8.original.commons</pattern>
                                    <shadedPattern>org.apache.xbean.asm8.shade.commons</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.objectweb.asm</pattern>
                                    <shadedPattern>org.apache.xbean.asm8</shadedPattern>
                                </relocation>
                            </relocations>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                        <exclude>META-INF/versions/**</exclude>
                                        <exclude>META-INF/maven/org.apache.xbean/xbean-asm-util/**</exclude>
                                        <exclude>**/module-info.class</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <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.asm8-shaded</Bundle-SymbolicName>
                                        <Export-Package>${xbean.osgi.export}</Export-Package>
                                        <Import-Package>${xbean.osgi.import}</Import-Package>
                                        <Automatic-Module-Name>${xbean.automatic.module.name}</Automatic-Module-Name>
                                    </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>
