<?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>itest-distribution</artifactId>
        <version>2.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>itest-distribution-contribution-binding-jsonrpc-calculator</artifactId>
    <name>Apache Tuscany SCA iTest Distribution Contribution binding-jsonrpc Calculator</name>

    <profiles>
        <profile>
            <id>distribution</id>
            <dependencies>
                <dependency>
                    <groupId>org.apache.tuscany.sca</groupId>
                    <artifactId>itest-bin-distro-unzip</artifactId>
                    <type>pom</type>
                    <version>2.0</version>
                </dependency>        
            </dependencies>
        </profile>
    </profiles>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.3</version>

                <dependencies>
                    <dependency>
                        <groupId>ant</groupId>
                        <artifactId>ant-trax</artifactId>
                        <version>1.6.5</version>
                    </dependency>
                    <!-- this JDk dependency is a workaround for Maven bug - http://jira.codehaus.org/browse/MNG-1323  -->
                    <dependency>
                        <groupId>sun.jdk</groupId>
                        <artifactId>tools</artifactId>
                        <version>1.6</version>
                        <scope>system</scope>
                        <systemPath>${java.home}/../lib/tools.jar</systemPath>
                    </dependency>
                </dependencies>

                <executions>
                    <execution>
                        <id>run-samples</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks> 
                                <property name="tuscany.version" value="${project.version}" />
                                <property name="java.home" value="${java.home}"/>
                                <ant antfile="./build.xml" target="run"/>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
