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

  <parent>
    <groupId>org.apache.cocoon</groupId>
    <artifactId>cocoon</artifactId>
    <version>2.3.1-SNAPSHOT</version>
  </parent>

  <artifactId>cocoon-blocks-modules</artifactId>
  <version>2.3.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Cocoon Blocks [modules]</name>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes combine.children="append">
            <!--
              The following exclusions are only needed if the allblocks profile is not enabled as
              well as for some disabled modules. For the allblocks modules it doesn't matter to add
              them here as soon as it's enabled these will not match anyway.
            -->
            <exclude>cocoon-chaperon/cocoon-chaperon-sample/src/main/resources/COB-INF/grammars/java.grm</exclude>
            <exclude>cocoon-faces/cocoon-faces-sample/src/main/resources/COB-INF/cardemo/*</exclude>
            <exclude>cocoon-html/cocoon-html-impl/src/main/resources/org/apache/cocoon/html/*.properties</exclude>
            <exclude>cocoon-jcr/cocoon-jcr-sample/src/main/resources/COB-INF/repotest/**</exclude>
            <exclude>cocoon-midi/cocoon-midi-impl/src/test/resources/org/apache/cocoon/generation/*.dtd</exclude>
            <exclude>cocoon-poi/cocoon-poi-impl/src/main/resources/org/apache/cocoon/components/elementprocessor/impl/poi/hssf/elements/**</exclude>
            <exclude>cocoon-portal/cocoon-portal-portlet-impl/src/main/resources/org/apache/cocoon/portal/pluto/deployment/web-app_2_3.dtd</exclude>
          </excludes>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifestEntries>
              <Cocoon-Block-Name>${project.artifactId}</Cocoon-Block-Name>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.cocoon</groupId>
        <artifactId>cocoon-maven-plugin</artifactId>
        <version>1.0.2</version>
      </plugin>

      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.7</version>
        <configuration>
          <connectors>
            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
              <port>8888</port>
              <maxIdleTime>30000</maxIdleTime>
            </connector>
          </connectors>
          <webAppSourceDirectory>target/rcl/webapp</webAppSourceDirectory>
          <contextPath>/</contextPath>
          <systemProperties>
            <systemProperty>
              <name>org.apache.cocoon.log4j.loglevel</name>
              <value>ERROR</value>
            </systemProperty>
            <systemProperty>
              <name>org.apache.cocoon.mode</name>
              <value>dev</value>
            </systemProperty>
          </systemProperties>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <modules>
    <module>cocoon-ajax</module>
    <module>cocoon-apples</module>
    <module>cocoon-core-sample</module>
    <module>cocoon-flowscript</module>
    <module>cocoon-forms</module>
    <module>cocoon-it</module>
    <module>cocoon-linkrewriter</module>
    <module>cocoon-template</module>
    <module>cocoon-samples-style</module>
    <module>cocoon-batik</module>
    <module>cocoon-welcome</module>
  </modules>

  <profiles>
    <profile>
      <id>eventcache-jms</id>
      <modules>
        <module>cocoon-eventcache</module>
        <module>cocoon-jms</module>
      </modules>
    </profile>

    <profile>
      <id>allblocks</id>
      <activation>
        <property>
          <name>allblocks</name>
        </property>
      </activation>
      <modules>
        <module>cocoon-asciiart</module>
        <module>cocoon-auth</module>
        <module>cocoon-authentication-fw</module>
        <module>cocoon-axis</module>
        <module>cocoon-bsf</module>
        <module>cocoon-captcha</module>
        <!--module>cocoon-chaperon</module-->
        <module>cocoon-cron</module>
        <module>cocoon-databases</module>
        <!--module>cocoon-deli</module-->
        <module>cocoon-eventcache</module>
        <module>cocoon-faces</module>
        <module>cocoon-fop</module>
        <module>cocoon-html</module>
        <!-- The resize operation seems to fail -->
        <!--module>cocoon-imageop</module-->
        <module>cocoon-itext</module>
        <module>cocoon-javaflow</module>
        <module>cocoon-jcr</module>
        <module>cocoon-jfor</module>
        <module>cocoon-jms</module>
        <module>cocoon-jsp</module>
        <module>cocoon-lucene</module>
        <module>cocoon-mail</module>
        <module>cocoon-midi</module>
        <module>cocoon-naming</module>
        <module>cocoon-ojb</module>
        <module>cocoon-petstore</module>
        <module>cocoon-poi</module>
        <module>cocoon-portal</module>
        <module>cocoon-profiler</module>
        <module>cocoon-proxy</module>
        <module>cocoon-python</module>
        <module>cocoon-qdox</module>
        <module>cocoon-querybean</module>
        <module>cocoon-repository</module>
        <module>cocoon-scratchpad</module>
        <module>cocoon-serializers</module>
        <module>cocoon-session-fw</module>
        <module>cocoon-slide</module>
        <module>cocoon-slop</module>
        <module>cocoon-stx</module>
        <module>cocoon-taglib</module>
        <module>cocoon-tour</module>
        <module>cocoon-validation</module>
        <module>cocoon-velocity</module>
        <module>cocoon-web3</module>
        <module>cocoon-webdav</module>
        <!--module>cocoon-xmldb</module-->
        <module>cocoon-xsp</module>
      </modules>
    </profile>
  </profiles>

</project>
