使用fileset和pathelement在build.xml中设置classpath之间的区别

时间:2013-01-21 13:33:53

标签: java ant classpath build.xml

我有一个构建文件,声明了如图所示的类路径

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

我尝试查看文档,但我无法理解使用 pathelement

我知道ID在执行任务时用于引用此类路径,而fileset包含jar文件。

编辑1: 我怀疑为什么我们不能使用fileset来包含类文件来代替pathelement

2 个答案:

答案 0 :(得分:6)

最新编辑:

  

我的疑问是为什么我们不能使用fileset来包含类文件代替pathelement?

如果您使用文件集,那么您将在路径中添加一组类文件,如下所示:

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

Java希望看到的只是:

CLASSPATH=classes

只有jar(以及WAR,EAR等)文件在类路径中明确列出(Java将打开它们并加载它们的类文件),因此需要在ANT中使用文件集。

更新

以下是Oracle文档:

  

.jar,.zip或.class文件的类路径。每个类路径都应以文件名或目录结尾,具体取决于您将类路径设置为:

     
      
  • 对于包含.class文件的.jar或.zip文件,类路径以.zip或.jar文件的名称结尾。
  •   
  • 对于未命名包中的.class文件,类路径以包含.class文件的目录结束。
  •   
  • 对于命名包中的.class文件,类路径以包含“root”包的目录(完整包名中的第一个包)结束。
  •   

答案 1 :(得分:2)

关于'pathelements'here已有类似的问题。从提供的文件: “如果它的路径结构与您的示例中类似:”类似路径的结构可以通过嵌套元素包含对另一个类路径结构(路径本身就是资源集合)的引用“

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

如果是类路径结构: “path属性旨在与预定义路径一起使用”

<classpath>
  <pathelement path="${classpath}"/>
  <pathelement location="lib/helper.jar"/>
</classpath>