<?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</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>
      <resources>
        <resource>
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.template</include>
          </includes>
        </resource>
      </resources>
      <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>

