<?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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>myfaces</artifactId>
        <groupId>org.apache.myfaces</groupId>
        <version>6</version>
    </parent>

    <groupId>org.apache.myfaces.html5</groupId>
    <artifactId>myfaces-html5-project</artifactId>
    <packaging>pom</packaging>
    <name>Apache MyFaces Html5 Parent Project</name>
    <version>0.0.4-SNAPSHOT</version>
    <description>Apache MyFaces Html5 is a sub-project of Apache MyFaces which provides Html5 functionality.</description>
    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/myfaces/html5/trunk</connection>
        <developerConnection>scm:svn:http://svn.apache.org/repos/asf/myfaces/html5/trunk</developerConnection>
    </scm>

    <modules>
        <module>myfaces-html5-core</module>
        <module>myfaces-html5-examples</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>org.apache.myfaces.core</groupId>
            <artifactId>myfaces-api</artifactId>
            <version>${myfaces-core-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.myfaces.core</groupId>
            <artifactId>myfaces-impl</artifactId>
            <version>${myfaces-core-version}</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-source</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
    <profiles>
        <profile>
            <!--
            - Whenever the site will be generated, need to use the command
            -   mvn -Pgenerate-site site
            -->
            <id>generate-site</id>
            <build>
                <plugins>
                    <plugin>
                        <!-- this plugin will generate the project site. -->
                        <artifactId>maven-site-plugin</artifactId>
                        <version>2.0-beta-6</version>
                    </plugin>
                </plugins>
            </build>
            <reporting>
            <plugins>
                <plugin>
                    <!-- disable the plugin for this site project -->
                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>2.2</version>
                    <reportSets>
                        <reportSet />
                    </reportSets>
                </plugin>
                <plugin>
                <!-- disable the plugin for this site project -->
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>findbugs-maven-plugin</artifactId>
                    <version>1.2</version>
                    <reportSets>
                        <reportSet />
                    </reportSets>
                </plugin>
                <plugin>
                <!-- disable the plugin for this site project -->
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>jdepend-maven-plugin</artifactId>
                    <version>2.0-beta-1</version>
                    <reportSets>
                        <reportSet />
                    </reportSets>
                </plugin>
            </plugins>
        </reporting>
    </profile>
    </profiles>
    
    <properties>
        <myfaces-core-version>2.0.1</myfaces-core-version>
        <myfaces-shared-html5-version>4.0.6-SNAPSHOT</myfaces-shared-html5-version>
    </properties>

</project>