<?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-compliance-tests</artifactId>
        <version>2.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>tuscany-compliance-test-java-ci</artifactId>
    <name>Apache Tuscany SCA Specification Compliance Tests Java CI</name>

    <dependencies>

        <dependency>
                   <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-otests-sca-j-ci-tests</artifactId>
                   <version>2.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-base-runtime</artifactId>
            <version>2.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-binding-ws-runtime-axis2</artifactId>
            <version>2.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty</artifactId>
            <version>6.1.19</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.5</version>
            <scope>test</scope>
        </dependency>

        <dependency>
           <groupId>org.codehaus.woodstox</groupId>
           <artifactId>wstx-asl</artifactId>
           <version>3.2.9</version>
        </dependency>

    </dependencies>

  <build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
                        
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <argLine>-Xms256m -Xmx1024m</argLine>
           <excludes>
              <exclude>**/POJO_10004_TestCase.java</exclude> <!-- TUSCANY-3880 -->
           </excludes>
         </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>unpack</id>
            <phase>process-classes</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
               <artifactItems>
                 <artifactItem>
                   <groupId>org.apache.tuscany.sca</groupId>
                   <artifactId>oasis-jci-contributions</artifactId>
                   <version>2.0-SNAPSHOT</version>
                   <type>zip</type>
                   <outputDirectory>${project.build.directory}/oasis-contributions</outputDirectory>
                 </artifactItem>
                 <artifactItem>
                   <groupId>org.apache.tuscany.sca</groupId>
                   <artifactId>tuscany-otests-sca-j-ci-tests</artifactId>
                   <version>2.0-SNAPSHOT</version>
                   <type>jar</type>
                   <excludes>commons-logging.properties,oasis-sca-tests.properties,tuscany-oasis-sca-tests-errors.properties</excludes>
                   <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
                 </artifactItem>
               </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
</project>
