<?xml version="1.0" encoding="UTF-8"?>
<!-- 
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed 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>
  <extend>${basedir}/../project.xml</extend>
  <artifactId>maven-directory-plugin</artifactId>
  <name>ApacheDS Plugin</name>
  <package>org.apache.ldap.server.tools</package>
  <inceptionYear>2004</inceptionYear>
  <shortDescription>A collection of server tools as a maven plugin</shortDescription>
  <description>
    A collection of tools as plugins to manage various tasks associated with 
    the directory server.
  </description>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
    </dependency>
    <dependency>
      <groupId>ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.5.3-1</version>
    </dependency>
    <dependency>
      <groupId>antlr</groupId>
      <artifactId>antlr</artifactId>
      <version>2.7.2</version>
    </dependency>
    <dependency>
      <groupId>directory-shared</groupId>
      <artifactId>ldap-common</artifactId>
      <version>0.9.1-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>directory</groupId>
      <artifactId>apacheds-shared</artifactId>
      <version>0.9</version>
    </dependency>
    <dependency>
      <groupId>velocity</groupId>
      <artifactId>velocity-dep</artifactId>
      <version>1.4</version>
      <properties>
        <gump.project>jakarta-velocity</gump.project>
        <gump.id>velocity-dep</gump.id>
      </properties>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
    <unitTest>
      <resources>
        <resource>
          <directory>src/main/schema</directory>
          <targetPath>org/apache/ldap/server/tools/schema</targetPath>
          <includes>
            <include>**/*.schema</include>
          </includes>
          <filtering>false</filtering>
        </resource>
      </resources>
      <includes>
        <include>**/*Test.java</include>
      </includes>
    </unitTest>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.template</include>
        </includes>
      </resource>
      <resource>
        <directory>${basedir}/src/main/plugin-resources</directory>
        <targetPath>plugin-resources</targetPath>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>${basedir}</directory>
        <includes>
          <include>plugin.jelly</include>
          <include>plugin.properties</include>
          <include>project.properties</include>
          <include>project.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>${basedir}/src/main/java</directory>
        <includes>
          <include>**/*.template</include>
          <include>**/*.properties</include>
          <include>**/*.x*</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>${basedir}/src/main/java/org/apache/ldap/server/tools/schema</directory>
        <targetPath>org/apache/ldap/server/tools/schema</targetPath>
        <includes>
          <include>antlrTypeTokenTypes.txt</include>
          <include>antlrOpenLdapSchemaParserTokenTypes.txt</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

  <reports>
    <report>maven-changes-plugin</report>
    <report>maven-tasklist-plugin</report>
    <report>maven-junit-report-plugin</report>
    <report>maven-jdepend-plugin</report>
    <!-- <report>maven-jcoverage-plugin</report> breaks multiproject -->
    <!-- <report>maven-checkstyle-plugin</report> -->
    <report>maven-simian-plugin</report>
    <report>maven-javadoc-plugin</report>
    <report>maven-jxr-plugin</report>
    <report>maven-license-plugin</report>
    <report>maven-multiproject-plugin</report>
  </reports>

</project>

