Question

I have a build file that declares the classpath as shown

<path id="compile.classpath">
    <fileset dir="${basedir}/lib"    includes="**"/>        
    <fileset dir="${jboss.home}/lib" includes="**"/>        
    <pathelement path ="${build.classes.dir}"/>
</path>

I tried looking at the documentation but I am not able to understand the use of pathelement.

I know that the ID is used to refer to this class path while performing a task and fileset includes the jarfiles.

edit 1: My doubt is Why can't we use fileset to include the class files in place of pathelement?

Was it helpful?

Solution

Latest edit:

My doubt is Why can't we use fileset to include the class files in place of pathelement?

If you use a fileset then you'd be adding a set of class files to the path as follows:

CLASSPATH=classes/MyClass1.class:classes/MyClass2.class:classes/MyClass3.class:....

When what Java expects to see is simply:

CLASSPATH=classes

Only jar (and WAR,EAR,etc) files are explicitly listed on the classpath (Java will open them up and load their class files), hence the need for a fileset in ANT.

Update

Here's the Oracle documentation:

Class paths to the .jar, .zip or .class files. Each classpath should end with a filename or directory depending on what you are setting the class path to:

  • For a .jar or .zip file that contains .class files, the class path ends with the name of the .zip or .jar file.
  • For .class files in an unnamed package, the class path ends with the directory that contains the .class files.
  • For .class files in a named package, the class path ends with the directory that contains the "root" package (the first package in the full package name).

OTHER TIPS

There was already similar question about 'pathelements' here. From the provided documentation: "If it's path structure like in your example: "A path-like structure can include a reference to another path-like structure (a path being itself a resource collection) via nested elements"

 <path id="base.path">
  <pathelement path="${classpath}"/>
  <fileset dir="lib">
    <include name="**/*.jar"/>
  </fileset>
  <pathelement location="classes"/>
</path>

If it's classpath structure: "The path attribute is intended to be used with predefined paths"

<classpath>
  <pathelement path="${classpath}"/>
  <pathelement location="lib/helper.jar"/>
</classpath>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top