#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?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.
-->
<!-- This is the project descriptor for the examples of my components -->

<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>
        <groupId>${groupId}</groupId>
        <artifactId>${artifactId}-project</artifactId>
        <version>${version}</version>
    </parent>
    
    <modelVersion>4.0.0</modelVersion>
    <artifactId>${artifactId}-examples</artifactId>
    <packaging>war</packaging>
    <name>${artifactId}-examples</name>
    <description>My Components Examples</description>

    <!-- Instructions 
      - Run using jetty 
          mvn clean jetty:run
          mvn clean -Dcontainer=jetty-mojarra jetty:run
          Set your browser to http://localhost:8080/${artifactId}-examples
      - Run using tomcat
          mvn clean -Dcontainer=tomcat7 tomcat:run
          Set your browser to http://localhost:8080/${artifactId}-examples
      - Run war using tomcat
          mvn clean -Dcontainer=tomcat7 tomcat:run-war
          Set your browser to http://localhost:8080/${artifactId}-examples
      - Run war using jetty (remove <webApp> config inside plugin config first)
          mvn clean jetty:run-war
          mvn clean -Dcontainer=jetty-mojarra jetty:run-war
          Set your browser to http://localhost:8080
      - Build war and bundle JSF jars 
          mvn clean -Pbundle-myfaces install
          mvn clean -Pbundle-mojarra install
     -->

    <build>
        <finalName>myfaces-jsfcomponents20</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

    <!-- Project dependencies -->
    <dependencies>
        <dependency>
            <groupId>${groupId}</groupId>
            <artifactId>${artifactId}-core</artifactId>
            <version>${symbol_dollar}{project.version}</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_2.5_spec</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jsp_2.1_spec</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-el_2.2_spec</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-annotation_1.0_spec</artifactId>
            <version>1.1.1</version>
            <scope>provided</scope>
        </dependency>

        <!-- JSF API: Add here as provided dependency and then add it
             on jetty-maven-plugin as compile/runtime dependency.
             The same goes for other JSF libraries. -->
        <dependency>
            <groupId>org.apache.myfaces.core</groupId>
            <artifactId>myfaces-api</artifactId>
            <version>${symbol_dollar}{jsf-myfaces.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

    <profiles>
        <profile>
            <id>bundle-myfaces</id>
            <activation>
                <property>
                    <name>jsf</name>
                    <value>myfaces</value>
                </property>
            </activation>
            <!-- Include MyFaces jars into the war -->
            <dependencies>
                <dependency>
                    <groupId>org.apache.myfaces.core</groupId>
                    <artifactId>myfaces-api</artifactId>
                    <version>${symbol_dollar}{jsf-myfaces.version}</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.myfaces.core</groupId>
                    <artifactId>myfaces-impl</artifactId>
                    <version>${symbol_dollar}{jsf-myfaces.version}</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
        </profile>
        <!-- By default the war examples use myfaces! :) -->
        <profile>
            <!-- Plugin embedded jetty 8 container. 
                 Just running use:
                 mvn clean jetty:run
            -->
            <!-- For debugging use (attach debugger port 8000):
                 mvnDebug clean jetty:run
            -->
            <id>jettyConfig</id>
            <activation>
                <property>
                    <name>!container</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <!--This plugin allows to run the war using mvn jetty:run -->
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>jetty-maven-plugin</artifactId>
                        <version>${symbol_dollar}{jetty.maven.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <systemProperty>
                                    <!-- optional to use the ecj compiler -->
                                    <name>org.apache.jasper.compiler.disablejsr199</name>
                                    <value>true</value>
                                </systemProperty>
                            </systemProperties>
                            <webApp>
                                <contextPath>/${symbol_dollar}{artifactId}</contextPath>
                            </webApp>
                            <scanIntervalSeconds>5</scanIntervalSeconds>
                        </configuration>
                        <dependencies>
                           <!-- Tld scanning only works when JSF is included
                                as container dependency. Add other jsf libraries
                                here, so jetty:run goal can find and process them -->
                            <dependency>
                                <groupId>org.apache.myfaces.core</groupId>
                                <artifactId>myfaces-api</artifactId>
                                <version>${symbol_dollar}{jsf-myfaces.version}</version>
                                <scope>compile</scope>
                            </dependency>
                            <dependency>
                                <groupId>org.apache.myfaces.core</groupId>
                                <artifactId>myfaces-impl</artifactId>
                                <version>${symbol_dollar}{jsf-myfaces.version}</version>
                                <scope>runtime</scope>
                            </dependency>
                            <dependency>
                                <groupId>org.apache.myfaces.examples.jsfcomponents20</groupId>
                                <artifactId>myfaces-jsfcomponents20-core</artifactId>
                                <version>${symbol_dollar}{project.version}</version>
                                <scope>compile</scope>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
            <properties>
                <jsf_implementation>MyFaces</jsf_implementation>
            </properties>
        </profile>

        <profile>
            <id>bundle-mojarra</id>
            <activation>
                <property>
                    <name>jsf</name>
                    <value>mojarra</value>
                </property>
            </activation>
            <!-- Include Mojarra jars into the war -->
            <dependencies>
                <dependency>
                    <groupId>com.sun.faces</groupId>
                    <artifactId>jsf-api</artifactId>
                    <version>${symbol_dollar}{jsf-mojarra.version}</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>com.sun.faces</groupId>
                    <artifactId>jsf-impl</artifactId>
                    <version>${symbol_dollar}{jsf-mojarra.version}</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
            <repositories>
                <repository>
                    <id>java.net</id>
                    <url>http://download.java.net/maven/2</url>
                </repository>
            </repositories>
        </profile>

        <profile>
            <!-- Plugin embedded jetty 8 container. 
                 Just running use:
                 mvn clean -Dcontainer=jetty-mojarra jetty:run 
            -->
            <!-- For debugging use (attach debugger port 8000):
                 mvn clean -Dcontainer=jetty-mojarra jetty:run 
            -->
            <id>jettyConfig-mojarra</id>
            <activation>
                <property>
                    <name>container</name>
                    <value>jetty-mojarra</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <!--This plugin allows to run the war using mvn jetty:run -->
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>jetty-maven-plugin</artifactId>
                        <version>${symbol_dollar}{jetty.maven.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <systemProperty>
                                    <!-- optional to use the ecj compiler -->
                                    <name>org.apache.jasper.compiler.disablejsr199</name>
                                    <value>true</value>
                                </systemProperty>
                            </systemProperties>
                            <webApp>
                                <contextPath>/${symbol_dollar}{artifactId}</contextPath>
                            </webApp>
                            <scanIntervalSeconds>5</scanIntervalSeconds>
                        </configuration>
                        <dependencies>
                           <!-- Tld scanning only works when JSF is included
                                as container dependency. Add other jsf libraries
                                here, so jetty:run goal can find and process them -->
                           <dependency>
                               <groupId>com.sun.faces</groupId>
                               <artifactId>jsf-api</artifactId>
                               <version>${symbol_dollar}{jsf-mojarra.version}</version>
                               <scope>compile</scope>
                           </dependency>
                           <dependency>
                               <groupId>com.sun.faces</groupId>
                               <artifactId>jsf-impl</artifactId>
                               <version>${symbol_dollar}{jsf-mojarra.version}</version>
                               <scope>runtime</scope>
                           </dependency>
                           <dependency>
                               <groupId>org.apache.myfaces.examples.jsfcomponents20</groupId>
                               <artifactId>myfaces-jsfcomponents20-core</artifactId>
                               <version>${symbol_dollar}{project.version}</version>
                               <scope>compile</scope>
                           </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
            <repositories>
                <repository>
                    <id>java.net</id>
                    <url>http://download.java.net/maven/2</url>
                </repository>
            </repositories>
            <properties>
                <jsf_implementation>Mojarra</jsf_implementation>
            </properties>
        </profile>
        
        <profile>
            <id>maven-tomcat7</id>
            <activation>
                <property>
                    <name>container</name>
                    <value>tomcat7</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                      <groupId>org.apache.tomcat.maven</groupId>
                      <artifactId>tomcat7-maven-plugin</artifactId>
                      <version>2.0-beta-1</version>
                    </plugin>
                </plugins>
            </build>
            <dependencies>
                <dependency>
                    <groupId>org.apache.myfaces.core</groupId>
                    <artifactId>myfaces-api</artifactId>
                    <version>${symbol_dollar}{jsf-myfaces.version}</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.myfaces.core</groupId>
                    <artifactId>myfaces-impl</artifactId>
                    <version>${symbol_dollar}{jsf-myfaces.version}</version>
                    <scope>runtime</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.myfaces.examples.jsfcomponents20</groupId>
                    <artifactId>myfaces-jsfcomponents20-core</artifactId>
                    <version>${symbol_dollar}{project.version}</version>
                    <scope>compile</scope>
                </dependency>

            </dependencies>
        </profile>

    </profiles>

</project>
