<?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>
    <artifactId>extscript-examples</artifactId>
    <packaging>pom</packaging>
    <name>Examples Submodule</name>
    <version>1.0.5-SNAPSHOT</version>

    <description>
        Examples Meta Project, see the subprojects
        for starting various parts of ext-scripting
    </description>
    <properties>
        <tomcat7-maven-plugin.version>2.0</tomcat7-maven-plugin.version>
    </properties>

    <parent>
        <groupId>org.apache.myfaces.extensions.scripting</groupId>
        <artifactId>extscript-root</artifactId>
        <version>1.0.5-SNAPSHOT</version>
    </parent>

    <scm>
        <connection>
            scm:svn:http://svn.apache.org/repos/asf/myfaces/extensions/scripting/tags/extscript-root-1.0.4/extscript-examples
        </connection>
        <developerConnection>
            scm:svn:https://svn.apache.org/repos/asf/myfaces/extensions/scripting/tags/extscript-root-1.0.4/extscript-examples
        </developerConnection>
        <url>http://svn.apache.org/viewvc/myfaces/extensions/scripting/tags/extscript-root-1.0.4/extscript-examples
        </url>
    </scm>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>${tomcat7-maven-plugin.version}</version>
                <configuration>
                    <path>/</path>
                    <port>9080</port>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>8.1.2.v20120308</version>
                <configuration>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <port>9090</port>
                            <maxIdleTime>60000</maxIdleTime>
                        </connector>
                    </connectors>
                    <scanIntervalSeconds>1</scanIntervalSeconds>

                </configuration>
            </plugin>
            <!-- tomcat plugin as alternative testing ground -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.0</version>
            </plugin>
        </plugins>
    </build>
    <modules>
        <!--
        <module>myfaces12-example</module>
        -->
        <module>myfaces20-example</module>
        <module>myfaces20-extscript-helloworld</module>
        <module>blog-example</module>
        <module>cdi-example</module>
        <module>spring-example</module>
        <!--
        <module>spring-example</module>
        -->
    </modules>


    <profiles>
        <!--
             This profile is started with -D development and fetches in a secondary
             web.xml which is used internally for development purposes
         -->
        <profile>
            <id>development</id>

            <properties>
                <maven.war.webxml>${basedir}/src/main/conf/dev/web.xml</maven.war.webxml>
            </properties>
        </profile>
    </profiles>

</project>
