<?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>
  <packaging>pom</packaging>
  <parent>
    <groupId>org.apache.lenya</groupId>
    <artifactId>lenya-parent</artifactId>
    <version>2.2.0-SNAPSHOT</version>
    <relativePath>org.apache.lenya.parent/pom.xml</relativePath>
  </parent>

  <groupId>org.apache.lenya</groupId>
  <artifactId>lenya</artifactId>

  <name>Apache Lenya Project</name>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.4</version>
      </plugin>
    </plugins>
  </reporting>
  <modules>
    <module>org.apache.lenya.parent</module>
    <module>org.apache.lenya.core.ac</module>
    <module>org.apache.lenya.core.acusecases</module>
    <module>org.apache.lenya.core.administration</module>
    <module>org.apache.lenya.core.api</module>
    <module>org.apache.lenya.core.cache</module>
    <module>org.apache.lenya.core.gui</module>
    <module>org.apache.lenya.core.i18n</module>
    <module>org.apache.lenya.core.impl</module>
    <!-- <module>org.apache.lenya.core.janitor</module> -->
    <module>org.apache.lenya.core.ldap</module>
    <module>org.apache.lenya.core.linking</module>
    <module>org.apache.lenya.core.metadata.api</module>
    <module>org.apache.lenya.core.metadata.impl</module>
    <module>org.apache.lenya.core.monitoring</module>
    <module>org.apache.lenya.core.observation</module>
    <module>org.apache.lenya.core.properties</module>
    <module>org.apache.lenya.core.repository.api</module>
    <module>org.apache.lenya.core.repository.impl</module>
    <module>org.apache.lenya.core.resourcetype</module>
    <module>org.apache.lenya.core.sitemanagement</module>
    <module>org.apache.lenya.core.templating</module>
    <module>org.apache.lenya.core.usecase</module>
    <module>org.apache.lenya.core.workflow</module>
    <module>org.apache.lenya.core.utils</module>
    <module>org.apache.lenya.core.cocoon</module>
    <module>org.apache.lenya.core.publication.api</module>
    <module>org.apache.lenya.core.publication.impl</module>
    <module>org.apache.lenya.core.document.api</module>
    <module>org.apache.lenya.core.document.impl</module>
    <module>org.apache.lenya.core.transaction.api</module>
    <module>org.apache.lenya.core.transaction.impl</module>
    <module>org.apache.lenya.core.identity</module>
    <module>org.apache.lenya.core.proxy</module>
    <module>org.apache.lenya.core.session.api</module>
    <module>org.apache.lenya.core.session.impl</module>
    <module>org.apache.lenya.module.blog</module>
    <module>org.apache.lenya.module.bxe</module>
    <module>org.apache.lenya.module.cforms</module>
    <module>org.apache.lenya.module.collection</module>
    <module>org.apache.lenya.module.contactform</module>
    <module>org.apache.lenya.module.development</module>
    <module>org.apache.lenya.module.editors</module>
    <module>org.apache.lenya.module.export</module>
    <module>org.apache.lenya.module.fckeditor</module>
    <module>org.apache.lenya.module.kupu</module>
    <module>org.apache.lenya.module.languageselector</module>
    <module>org.apache.lenya.module.lenyadoc</module>
    <module>org.apache.lenya.module.linkcheck</module>
    <module>org.apache.lenya.module.links</module>
    <module>org.apache.lenya.module.lucene</module>
    <module>org.apache.lenya.module.menubar</module>
    <module>org.apache.lenya.module.migration</module>
    <module>org.apache.lenya.module.navigation</module>
    <module>org.apache.lenya.module.neutron</module>
    <module>org.apache.lenya.module.news</module>
    <module>org.apache.lenya.module.notification</module>
    <module>org.apache.lenya.module.opendocument</module>
    <module>org.apache.lenya.module.prettyprinting</module>
    <module>org.apache.lenya.module.profiling</module>
    <module>org.apache.lenya.module.resource</module>
    <module>org.apache.lenya.module.simplesite</module>
    <module>org.apache.lenya.module.sitetree</module>
    <module>org.apache.lenya.module.sourcerepository</module>
    <module>org.apache.lenya.module.svg</module>
    <module>org.apache.lenya.module.tinymce</module>
    <module>org.apache.lenya.module.usecasedocument</module>
    <module>org.apache.lenya.module.webdav</module>
    <module>org.apache.lenya.module.xhtml</module>
    <module>org.apache.lenya.module.xopus</module>
    <module>org.apache.lenya.optional.jcrsource</module>
    <module>org.apache.lenya.webapp</module>
    <module>org.apache.lenya.webapp.welcome</module>
    <module>org.apache.lenya.deprecated</module>
  </modules>
  
  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/lenya/trunk</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/lenya/trunk</developerConnection>
    <url>http://svn.apache.org/viewvc/lenya/trunk</url>
  </scm>

    <build>
    <plugins>
      <plugin>
        <!-- export our test classes in a separate jar -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <includes>
            <include>**/*TestCase.class</include>
            <include>**/*Test.class</include>
          </includes>
          <excludes>
            <exclude>**/Abstract*.class</exclude>
          </excludes>
          <!-- currently triggers NPE in surefire plugin
            <systemProperties>
            <property>
            <name>junit.test.loglevel</name>
            <value>3</value>
            </property>
            </systemProperties>
          -->
        </configuration>
      </plugin>
    </plugins>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <excludes>
          <exclude>META-INF/cocoon/properties/lenya.properties</exclude>
        </excludes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>META-INF/cocoon/properties/lenya.properties</include>
        </includes>
      </resource>
    </resources>
  </build>

  
</project>
