<!--
   Copyright 2003-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 default="test" xmlns:j="jelly:core" xmlns:maven="jelly:maven" xmlns:ant="jelly:ant">

<preGoal name="maven-jdepend-plugin:report">
  <path id="addl-classpath">
    <!-- add src/conf to the classpath, so that jdepend can find jdepend.properties -->
    <pathelement location="${basedir}/src/conf"/>
  </path>
  <maven:addPath id="maven-classpath" refid="addl-classpath"/>
</preGoal>

<postGoal name="clover:on">
  <ant:copy todir="${basedir}/target/clover/classes">
    <ant:fileset dir="${basedir}/src/test/">
      <ant:include name="**/*.txt"/>
    </ant:fileset>
  </ant:copy>
</postGoal>

<postGoal name="xdoc:register-reports"> 
  <attainGoal name="maven-checkstyle-plugin:deregister"/> 
<!--  <attainGoal name="maven-linkcheck-plugin:deregister"/> -->
<!--  <attainGoal name="maven-clover-plugin:register"/>  -->
</postGoal> 

</project>
