45

我正在查看 Apache Ant 1.8.0 版附带的文档,但找不到记录类路径、路径和路径元素的位置。我找到了一个描述类似结构的路径的页面,但它没有列出这些的有效属性或嵌套元素。我在文档中找不到的另一件事是对文件列表、文件集、模式集和路径之间的关系以及如何来回转换它们的描述。例如,必须有一种更简单的方法来仅编译一个包中的那些类,同时删除对包类的所有类依赖项并更新文档。

<!-- Get list of files in which we're interested. -->
<fileset id = "java.source.set"
    dir     = "${src}">
  <include name = "**/Package/*.java" />
</fileset>

<!-- Get a COMMA separated list of classes to compile. -->
<pathconvert property = "java.source.list"
    refid             = "java.source.set"
    pathsep           = ",">
  <globmapper from = "${src}/*.@{src.extent}"
      to           = "*.class" />
</pathconvert>

<!-- Remove ALL dependencies on package classes. -->
<depend srcdir = "${src}"
    destdir    = "${build}"
    includes   = "${java.source.list}"
    closure    = "yes" />

<!-- Get a list of up to date classes. -->
<fileset id = "class.uptodate.set"
    dir     = "${build}">
  <include name = "**/*.class" />
</fileset>

<!-- Get list of source files for up to date classes. -->
<pathconvert property = "java.uptodate.list"
    refid             = "class.uptodate.set"
    pathsep           = ",">
  <globmapper from="${build}/*.class" to="*.java" />
</pathconvert>

<!-- Compile only those classes in package that are not up to date. -->
<javac srcdir    = "${src}"
    destdir      = "${build}"
    classpathref = "compile.classpath"
    includes     = "${java.source.list}"
    excludes     = "${java.uptodate.list}"/>

<!-- Get list of directories of class files for package. --:
<pathconvert property = "class.dir.list"
    refid             = "java.source.set"
    pathsep           = ",">
  <globmapper from = "${src}/*.java"
      to           = "${build}*" />
</pathconvert>

<!-- Convert directory list to path. -->
<path id  = "class.dirs.path">
  <dirset dir  = "${build}"
      includes = "class.dir.list" />
</path>

<!-- Update package documentation. -->
<jdepend outputfile = "${docs}/jdepend-report.txt">
  <classpath refid = "compile.classpath" />
  <classpath location = "${build}" />
  <classespath>
    <path refid = "class.dirs.path" />
  </classespath>
  <exclude name = "java.*"  />
  <exclude name = "javax.*" />
</jdepend>

请注意,文件集、路径和逗号分隔列表之间有许多转换,只是为了获得不同 ant 任务所需的正确“类型”。有没有办法在处理复杂目录结构中最少的文件的同时简化这一点?

4

2 回答 2

11

这是我能找到的最接近类路径文档的地方。

http://ant.apache.org/manual/using.html#path

于 2010-03-26T21:38:40.497 回答
1

路径

此对象表示 CLASSPATH 或 PATH 环境变量使用的路径。路径也可以描述为唯一文件系统资源的集合。

PathElement

助手类,保存嵌套<pathelement>值。

直接在 JavaDoc 中定义。

ClassPathAbstractClasspathResource的一个实现:

通过 Java 类加载器访问的任何东西的资源表示。提供了设置/解析类路径的核心方法。

这是Resource的直接子类:

描述“类文件”资源(文件、ZipEntry 等)。此类旨在由需要记录有关文件、zip 条目或一些类似资源(URL、版本控制存储库中的存档等)的路径和日期/时间信息的类使用。

蚂蚁类图

FileSet 定义为:

FileSet 是一组文件。这些文件可以在从基本目录开始的目录树中找到,并与从许多 PatternSets 和 Selector 中获取的模式匹配。

选择器定义为:

选择器是一种机制,<fileset>可以根据<include><exclude>标签提供的文件名以外的标准选择构成 a 的文件。

PatternSet 定义为:

模式可以分组为集合,然后由它们的 id 属性引用。它们是通过模式集元素定义的,该元素可以嵌套在 FileSet 或构成隐式 FileSet 的基于目录的任务中。此外,模式集可以定义为与目标处于同一级别的独立元素——即,作为项目的子项以及目标的子项。

FileList 定义为:

FileLists 是明确命名的文件列表。FileSet 充当过滤器,仅返回文件系统中存在并匹配指定模式的那些文件,而 FileList 可用于指定可能存在或可能不存在的文件。多个文件被指定为相对于指定目录的文件列表,不支持通配符扩展(带有通配符的文件名将不加改变地包含在列表中)。FileLists 可以出现在支持此功能的任务中,也可以作为独立类型出现。

Ant 资源集合

在 Schematron 中,您可以通过以下方式验证这一点:

  <sch:pattern>

      <sch:title>Check allowed elements</sch:title>

      <sch:rule context="target/*[name() =  ancestor::*/taskdef/@name]">

              <sch:assert  test="true()">

              The target element may contain user-defined tasks.

            </sch:assert>

      </sch:rule>

 </sch:pattern>         

参考

于 2017-06-21T13:24:16.737 回答