<?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.myfaces.tobago</groupId>
    <artifactId>tobago-example</artifactId>
    <version>1.0.25</version>
  </parent>
  <artifactId>tobago-example-portlet</artifactId>
  <packaging>war</packaging>
  <name>Tobago Example for Portlets</name>

  <!--
  XXX This is only a test! It's not a functional example. 
  XXX It was successfully deployed on a Liferay 5.1.2, but the submit doesn't work.
  XXX JavaScript and CSS is not working
  -->

  <!--
    <repositories>
      <repository>
        <id>java.net-2</id>
        <name>java.net Maven 2 Repository</name>
        <url>http://download.java.net/maven/2/</url>
      </repository>
    </repositories>
  -->
  <dependencies>
    <dependency>
      <groupId>org.apache.myfaces.tobago</groupId>
      <artifactId>tobago-theme-speyside</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
    </dependency>

    <dependency>
      <groupId>javax.el</groupId>
      <artifactId>el-api</artifactId>
      <version>1.0</version>
      <!-- in the case of Servlet 2.5 / JSP 2.1
                 e. g. Tomcat 6 the scope should be "provided"
            <scope>provided</scope>
       -->
    </dependency>
      <dependency>
        <groupId>com.sun.el</groupId>
        <artifactId>el-ri</artifactId>
        <version>1.0</version>
      </dependency>
    <!--
        <dependency>
          <groupId>com.sun.faces.portlet</groupId>
          <artifactId>jsf-portlet</artifactId>
          <version>1.1.5</version>
        </dependency>
    -->
    <!--
    <dependency>
      <groupId>portlet-api</groupId>
      <artifactId>portlet-api</artifactId>
    </dependency>
    -->
    <!--
    <dependency>
      <groupId>org.apache.myfaces.portlet-bridge</groupId>
      <artifactId>portlet-bridge-api</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>

    <dependency>
      <groupId>org.apache.myfaces.portlet-bridge</groupId>
      <artifactId>portlet-bridge-impl</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
    -->

    <dependency>
      <groupId>org.apache.myfaces.core</groupId>
      <artifactId>myfaces-api</artifactId>
      <version>${myfaces.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.myfaces.core</groupId>
      <artifactId>myfaces-impl</artifactId>
      <version>${myfaces.version}</version>
    </dependency>

  </dependencies>
</project>
