<?xml version="1.0"?>
<!--
    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">

   <parent>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts-parent</artifactId>
      <version>1.4.0-SNAPSHOT</version>
   </parent>

   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts-apps</artifactId>
   <packaging>pom</packaging>
   <name>Struts Apps</name>

    <scm>
       <connection>scm:svn:http://svn.apache.org/repos/asf/struts/struts1/trunk/apps/</connection>
       <developerConnection>scm:svn:https://svn.apache.org/repos/asf/struts/struts1/trunk/apps/</developerConnection>
       <url>http://svn.apache.org/viewcvs.cgi/struts/struts1/trunk/apps/</url>
    </scm>

   <distributionManagement>
       <site>
           <id>apache-site</id>
           <url>scp://people.apache.org/www/struts.apache.org/1.x/struts-apps</url>
       </site>
   </distributionManagement>


   <modules>
      <module>cookbook</module>
      <module>faces-example1</module>
      <module>faces-example2</module>
      <module>examples</module>
      <module>blank</module>
      <module>mailreader</module>
      <module>el-example</module>
      <module>scripting-mailreader</module>
   </modules>

   <build>
      <resources>
        <!-- Include resources under src/main/java in WEB-INF/classes -->
         <resource>
            <directory>src/main/java</directory>
            <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
            </includes>
         </resource>
      </resources>

      <plugins>
         <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>0.3.1</version>
            <configuration>
               <container>
                  <containerId>tomcat5x</containerId>
                  <home>${cargo.tomcat5x.home}</home>
                  <log>${project.build.directory}/tomcat5x.log</log>
                  <output>${project.build.directory}/tomcat5x.out</output>
               </container>
               <configuration>
                  <home>${project.build.directory}/tomcat5x</home>
               </configuration>
            </configuration>
         </plugin>
         <!-- Include source code under WEB-INF/src/java -->
         <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <id>copy-sources</id>
                  <phase>process-sources</phase>
                  <configuration>
                     <tasks>
                        <copy todir="${project.build.directory}/${pom.artifactId}/WEB-INF/src/java"
                              failonerror="false">
                           <fileset dir="${basedir}/src/main/java"/>
                        </copy>
                     </tasks>
                  </configuration>
                  <goals>
                     <goal>run</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>
      </plugins>

      <finalName>${pom.artifactId}</finalName>

   </build>

</project>
