<?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.2</version>
    </dependency>
    <dependency>
      <groupId>directory</groupId>
      <artifactId>apacheds-shared</artifactId>
      <version>0.9.2</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-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>

