You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bu...@apache.org on 2004/11/10 09:28:15 UTC

DO NOT REPLY [Bug 32148] New: - path/fileset confusing when using relative paths and .. (parent directory)

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=32148>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=32148

path/fileset confusing when using relative paths and .. (parent directory)

           Summary: path/fileset confusing when using relative paths and ..
                    (parent directory)
           Product: Ant
           Version: 1.6.2
          Platform: Sun
        OS/Version: Solaris
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Core
        AssignedTo: dev@ant.apache.org
        ReportedBy: linus@tigris.org


The following works:
  <path id="modulespecific">
    <fileset dir="${basedir}/..">
      <include name="net/build/net.jar"/>
    </fileset>
  </path>
Debug output from javac rule is:
[...]
fileset: Setup scanner in dir /[path]/modules with patternSet{ includes:
[net/build/net.jar] excludes: [] }
[...]
    [javac] '-classpath'
    [javac] '[...]:/[path]/modules/net/build/net.jar:[...]'


Then when I change to:
  <path id="modulespecific">
    <fileset dir="${basedir}">
      <include name="../net/build/net.jar"/>
    </fileset>
  </path>
It suddenly doesn't find the file anymore. The debug output is:
fileset: Setup scanner in dir /[path]/modules/ic with patternSet{ includes:
[../net/build/net.jar] excludes: [] }
[...]
    [javac] '-classpath'
    [javac] '[...net/build/net.jar not included...]'

I would have expected the second alternative to work just as well as the first
one. This is confusing. I consider it an error in ant.

I am trying to add some user libraries to the build.xml file that was included
in the jcoverage GPL-version. The whole of the modified build.xml file is here:
<?xml version="1.0" encoding="UTF-8"?>
<project name="jcoverage.examples" default="main" basedir=".">
  <description>
    jcoverage copyright (C)2003 jcoverage ltd. http://jcoverage.com/
    jcoverage is licensed under the GNU General Public License
    jcoverage licensing policy, http://jcoverage.com/license.html
    jcoverage comes with ABSOLUTELY NO WARRANTY
  </description>


  <!--
    all build artefacts are deposited under this directory.
  -->
  <property name="build.dir" value="${basedir}/build"/>

  <!--
    classes generated by the javac compiler are deposited in this
    directory.
  -->
  <property name="build.classes.dir" value="${build.dir}/classes"/>
  <property name="build.tests.dir" value="${build.dir}/tests"/>

  <!--
    instrumented classes are deposited into this directory.
  -->
  <property name="build.instrumented.dir"
value="${build.dir}/instrumented-classes"/>

  <!--
    coverage reports are deposited into this directory. For the
    HTML report, look at ${build.coverage.dir}/index.html. For the XML
    report look at ${build.coverage.dir}/coverage.xml.
  -->
  <property name="build.coverage.dir" value="${build.dir}/coverage"/>

  <!--
    unit test reports from junit are deposited in this directory.
  -->
  <property name="build.reports.dir" value="${build.dir}/reports"/>

  <!--
    the root of a jcoverage distribution
  -->
  <property name="dist.dir"
value="${basedir}/../../tools/jcoverage/jcoverage-1.0.5"/>

  <!--
    third party libraries that are also shipped with jcoverage can be
    found in this directory.
  -->
  <property name="lib.dir" value="${dist.dir}/lib"/>

  <!--
    the source code can be found in this directory.
  -->
  <property name="src.dir" value="${basedir}/src/java"/>
  <property name="testsrc.dir" value="${basedir}/src/java-tests"/>

  <target name="main" depends="clean,init,compile,instrument,test,coverage"
description="clean build, instrument and unit test"/>

  <path id="modulespecific">
    <fileset dir="${basedir}">
      <include name="../net/build/net.jar"/>
    </fileset>
  </path>

  <path id="junit">
    <fileset dir="${lib.dir}">
      <include name="junit/3.8.1/*.jar"/>
    </fileset>
  </path>

  <path id="log4j">
    <fileset dir="${lib.dir}">
      <include name="log4j/1.2.8/*.jar"/>
    </fileset>
  </path>

  <path id="jcoverage">
    <fileset dir="${dist.dir}">
      <include name="jcoverage.jar"/>
    </fileset>
  </path>

  <taskdef classpathref="jcoverage" resource="tasks.properties"/>

  <target name="clean" description="clean up build artefacts">
    <delete quiet="true">
      <fileset dir="${build.dir}"/>
      <fileset dir="${basedir}">
        <include name="jcoverage.ser"/>
        <include name="jcoverage.log"/>
      </fileset>
    </delete>
  </target>

  <target name="init" description="create build directories">
    <mkdir dir="${build.dir}"/>
    <mkdir dir="${build.classes.dir}"/>
    <mkdir dir="${build.coverage.dir}"/>
    <mkdir dir="${build.instrumented.dir}"/>
    <mkdir dir="${build.reports.dir}"/>
  </target>

  <target name="compile" description="compile all classes">
    <javac srcdir="${src.dir}" destdir="${build.classes.dir}" failonerror="yes"
debug="yes" source="1.4">
      <classpath refid="junit"/>
      <classpath refid="log4j"/>
      <classpath refid="modulespecific"/>
    </javac>
    <javac srcdir="${testsrc.dir}" destdir="${build.tests.dir}"
failonerror="yes" debug="yes" source="1.4">
      <classpath location="${build.classes.dir}"/>
      <classpath refid="junit"/>
      <classpath refid="log4j"/>
      <classpath refid="modulespecific"/>
    </javac>
  </target>

  <target name="instrument" description="Add jcoverage instrumentation">
    <!--
      instrument the application classes, writing the instrumented
      classes into ${build.instrumented.dir}.
    -->
    <instrument todir="${build.instrumented.dir}">
      <!--
        Note that the following line causes instrument to ignore any
        source line containing a reference to log4j, for the purposes
        of coverage reporting.
      -->
      <ignore regex="org.apache.log4j.*"/>

      <fileset dir="${build.classes.dir}">
        <!--
          instrument all the application classes, but don't instrument
          the test classes.
        -->
        <include name="**/*.class"/>
      </fileset>
    </instrument>
  </target>

  <target name="test" description="Unit test the application">
    <junit fork="yes" dir="${basedir}" errorProperty="test.failed"
failureProperty="test.failed">
      <!--
        note the classpath order, instrumented classes are before the
        original (uninstrumented) classes.
      -->
      <classpath location="${build.instrumented.dir}"/>
      <classpath location="${build.classes.dir}"/>
      <classpath location="${build.tests.dir}"/>
      <classpath refid="modulespecific"/>

      <!--
        the instrumented classes reference classes used by the
        jcoverage runtime.
      -->
      <classpath refid="jcoverage"/>
      <formatter type="xml"/>

      <test name="${testcase}" todir="${build.reports.dir}" if="testcase"/>

      <batchtest todir="${build.reports.dir}" unless="testcase">    	
        <fileset dir="${testsrc.dir}">
          <include name="**/Test*.java"/>
        </fileset>
      </batchtest>
    </junit>
  </target>

  <target name="coverage" description="HTML and XML coverage reports can be
found in build/coverage">
    <report srcdir="${src.dir}" destdir="${build.coverage.dir}"/>
    <report srcdir="${src.dir}" destdir="${build.coverage.dir}" format="xml"/>

    <echo>
jcoverage reports have been generated.
The HTML report is ${build.coverage.dir}/index.html
The XML report is ${build.coverage.dir}/coverage.xml
    </echo>
  </target>
</project>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org