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

<!--
  - A "module" pom whose purpose is simply to build all maven modules
  - in the subdirectories. This is NOT the parent pom of any project,
  - and is not expected to ever be released.
  -->

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

  <parent>
    <groupId>org.apache.myfaces</groupId>
    <artifactId>myfaces</artifactId>
    <version>9</version>
  </parent>

  <groupId>org.apache.myfaces.buildtools</groupId>
  <artifactId>myfaces-plugin-module</artifactId>
  <version>1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Apache MyFaces Buildtools Maven2 Plugin Module</name>
  <url>http://myfaces.apache.org/build-tools/plugins</url>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/myfaces/myfaces-build-tools/trunk/maven2-plugins</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/myfaces/myfaces-build-tools/trunk/maven2-plugins</developerConnection>
    <url>http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins</url>
  </scm>

  <!-- WARNING: DO NOT DEPLOY SITE FROM HERE
   A parent module is at myfaces-plugin-parent, so when 
   a site needs to be deployed, run mvn site:site mvn site:deploy
   from myfaces-plugin-parent and then for each one of the remaining
   modules. If the goal is executed from here the site does not work
   well. -->
  <modules>
    <module>myfaces-plugin-parent</module>
    <module>myfaces-builder-annotations</module>
    <module>myfaces-builder-plugin</module>
    <module>myfaces-faces-plugin</module>
    <module>myfaces-i18n-plugin</module>
    <module>myfaces-javacc-plugin</module>
    <module>myfaces-javascript-plugin</module>
    <module>myfaces-jsdoc-plugin</module>
    <module>myfaces-jdev-plugin</module>
    <module>myfaces-tagdoc-plugin</module>
    <module>myfaces-wagon-plugin</module>
    <module>myfaces-xrts-plugin</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <inherited>true</inherited>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>2.2</version>
      </plugin>
    </plugins>
  </build>
  
</project>
