<?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">

    <parent>
        <artifactId>extscript-examples</artifactId>
        <groupId>org.apache.myfaces.extensions.scripting</groupId>
        <version>1.0.7-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.myfaces.extensions.scripting</groupId>
    <artifactId>myfaces20-example</artifactId>
    <packaging>war</packaging>
    <name>A custom project using myfaces 2.0</name>
    <version>1.0.7-SNAPSHOT</version>
    <url>http://www.apache.org</url>

    <scm>
        <connection>
            scm:svn:http://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example
        </connection>
        <developerConnection>
            scm:svn:https://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example
        </developerConnection>
        <url>http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example</url>
    </scm>

    <repositories>
        <repository>
            <id>jboss</id>
            <url>http://repository.jboss.com/maven2/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>

    </repositories>

    <build>
        <plugins>

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <!-- source 1.7 due to jruby constraints -->
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>

        </plugins>
    </build>
    <profiles>
        <profile>
            <id>mojarra</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <dependencies>
                 <dependency>
                     <groupId>jsf</groupId>
                     <artifactId>jsf</artifactId>
                     <version>2.2-SNAPSHOT</version>
                 </dependency>

                 <dependency>
                     <groupId>org.apache.myfaces.extensions.scripting</groupId>
                     <artifactId>extscript-mojarra-bundle</artifactId>
                     <version>1.0.6-SNAPSHOT</version>
                 </dependency>

            </dependencies>
        </profile>
        <profile>
            <id>myfaces</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>org.apache.myfaces.core</groupId>
                    <artifactId>myfaces-api</artifactId>
                    <version>${myfaces2.version}</version>
                    <scope>compile</scope>
                </dependency>

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

                <dependency>
                    <groupId>org.apache.myfaces.extensions.scripting</groupId>
                    <artifactId>extscript-myfaces20-bundle</artifactId>
                    <version>1.0.6-SNAPSHOT</version>
                </dependency>

            </dependencies>
        </profile>
    </profiles>


    <dependencies>
        <!--
             optional Groovy include,
             if we leave it out, Groovy support is disabled
             and only java support will work
         -->
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy.version}</version>
        </dependency>

        <!--
        LGPL so no depdendency allowed here, you however can add it yourself
        <dependency>
            <groupId>org.jruby</groupId>
            <artifactId>jruby-complete</artifactId>
            <version>1.6.8</version>
        </dependency>
        -->

        <!-- bean validation dependencies -->
        <!--
             note, this is a purely optional 
             dependency part and is only needed
             if you want to run bean validation
             and/or MyFaces ext-val
         -->
        <dependency>
            <groupId>org.apache.myfaces.extensions.validator</groupId>
            <artifactId>myfaces-extval-core</artifactId>
            <version>${extval.version}</version>
        </dependency>
        <!--
        <dependency>
            <groupId>org.apache.myfaces.extensions.validator.validation-modules</groupId>
            <artifactId>myfaces-extval-property-validation</artifactId>
            <version>${extval.version}</version>
        </dependency>
        -->
        <dependency>
            <groupId>org.apache.myfaces.extensions.validator.validation-modules</groupId>
            <artifactId>myfaces-extval-bean-validation</artifactId>
            <version>${extval.version}</version>
        </dependency>


        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.0.0.GA</version>
        </dependency>

        <!-- Hibernate annotations needs sl4j as dependency -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.4.2</version>
        </dependency>

        <!-- bean validation end -->
        <dependency>
            <groupId>org.apache.myfaces.tomahawk</groupId>
            <artifactId>tomahawk</artifactId>
            <version>1.1.6</version>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <artifactId>jstl</artifactId>
                    <groupId>javax.servlet</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>
