<?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 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>
        <groupId>org.apache.tuscany.sca</groupId>
        <artifactId>tuscany-sca</artifactId>
        <relativePath>../../pom.xml</relativePath>
        <version>2.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>tuscany-maven-plugin</artifactId>
    <packaging>maven-plugin</packaging>
    <name>Apache Tuscany Maven Tuscany Plugin</name>
    <version>2.0.1-SNAPSHOT</version>

    <dependencies>
       <dependency>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-project</artifactId>
          <version>2.0.3</version>
       </dependency>
       <dependency>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-plugin-api</artifactId>
          <version>2.0.3</version>
       </dependency>
          <dependency>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-artifact</artifactId>
          <version>2.0.3</version>
       </dependency>
       <dependency>
          <groupId>org.apache.tuscany.sca</groupId>
          <artifactId>tuscany-base-runtime</artifactId>
          <version>2.0.1-SNAPSHOT</version>
       </dependency>
       <dependency>
          <groupId>org.apache.tuscany.sca</groupId>
          <artifactId>tuscany-domain-hazelcast</artifactId>
          <version>2.0.1-SNAPSHOT</version>
       </dependency>
       <dependency>
          <groupId>jline</groupId>
          <artifactId>jline</artifactId>
          <version>0.9.95-huynhjl</version>
       </dependency>
       <dependency>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>jetty</artifactId>
          <version>6.1.19</version>
          <exclusions>
             <exclusion>
                <groupId>org.mortbay.jetty</groupId>
	            <artifactId>servlet-api</artifactId>
              </exclusion>
          </exclusions>
       </dependency>
       <dependency>
          <groupId>org.apache.tomcat</groupId>
          <artifactId>tomcat-servlet-api</artifactId>
          <version>7.0.8</version>
       </dependency>
       <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-core</artifactId>
          <version>7.0.8</version>
       </dependency>
       <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-logging-juli</artifactId>
          <version>7.0.8</version>
       </dependency>
       <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-jasper</artifactId>
          <version>7.0.8</version>
       </dependency>
       <dependency>
          <groupId>org.apache.tomcat</groupId>
          <artifactId>tomcat-jasper-el</artifactId>
          <version>7.0.8</version>
       </dependency>
       <dependency>
          <groupId>org.eclipse.jdt.core.compiler</groupId>
          <artifactId>ecj</artifactId>
          <version>3.5.1</version>
       </dependency>

    </dependencies>

</project>
