<?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>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.tuscany.sca</groupId>
        <artifactId>tuscany-shades</artifactId>
        <version>2.0-Beta1</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>org.apache.tuscany.sca.shades</groupId>
    <artifactId>tuscany-json</artifactId>
    <name>Apache Tuscany SCA JSON Support Jar</name>

    <dependencies>

        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-binding-jsonp-runtime</artifactId>
            <version>${pom.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-assembly</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-assembly-xml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-contribution</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-sca-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-host-http</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
            <version>${pom.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-assembly</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-core-spi</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-common-xml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-databinding</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.ws.commons.axiom</groupId>
                    <artifactId>axiom-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.ws.commons.axiom</groupId>
                    <artifactId>axiom-impl</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-assembly-xml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-contribution</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-sca-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-host-http</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-implementation-web-client</artifactId>
            <version>${pom.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-assembly</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>tuscany-implementation-web-runtime</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.tuscany.sca.shades</groupId>
            <artifactId>tuscany-base</artifactId>
            <version>${pom.version}</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.3.2</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                           <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
                           <artifactSet>
                              <includes>
                                 <include>org.apache.tuscany.sca:*</include>
                              </includes>
                           </artifactSet>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
