#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.
-->

<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>
    <groupId>${groupId}</groupId>
    <artifactId>${artifactId}</artifactId>
    <packaging>war</packaging>
    <version>${version}</version>
    <name>${artifactId}</name>
    <description>A custom project using MyFaces 2.0</description>
    <url>http://www.myorganization.org</url>

    <!-- Instructions 
      - Run using jetty 
          mvn clean jetty:run
          mvn clean -Dcontainer=jetty-mojarra jetty:run
          Set your browser to http://localhost:8080/${artifactId}
      - Run using tomcat
          mvn clean -Dcontainer=tomcat7 tomcat:run
          Set your browser to http://localhost:8080/${artifactId}
      - Run war using tomcat
          mvn clean -Dcontainer=tomcat7 tomcat:run-war
          Set your browser to http://localhost:8080/${artifactId}
      - 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
     -->

    <properties>
        <jsf-myfaces.version>2.1.7</jsf-myfaces.version>
        <jsf-mojarra.version>2.1.7</jsf-mojarra.version>        
        <jetty.maven.plugin.version>8.1.3.v20120416</jetty.maven.plugin.version>
    </properties>

    <build>
        <finalName>${artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <!-- Project dependencies -->
    <dependencies>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_2.5_spec</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-el_2.2_spec</artifactId>
            <version>1.0.2</version>
            <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>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>runtime</scope>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</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>

        <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>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </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>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
            <repositories>
                <repository>
                    <id>java.net</id>
                    <url>http://download.java.net/maven/2</url>
                </repository>
            </repositories>
        </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>
            </dependencies>
        </profile>

    </profiles>

</project>
