关于使用pathconvert Ant任务的一些疑问。它做什么?

时间:2013-10-14 11:20:33

标签: java ant

我是Ant的新手(我来自Maven),我必须执行一个在我公司的应用程序中使用的旧Ant脚本的重构。

我有一些问题需要了解Ant代码的确切内容:

    <pathconvert property="jar.classpath" pathsep=" ">
        <path refid="project.classpath" />
        <chainedmapper>
            <flattenmapper />
            <globmapper from="*" to="lib/*" />
        </chainedmapper>
    </pathconvert>

这些行分为名为 jar 目标,用于创建应用程序的 jar

阅读官方Ant文档,我发现这是一个Ant任务:

  

将嵌套的ResourceCollections或一个引用转换为   特定平台的路径表单,可选地存储结果   进入一个给定的财产。它也可以在你需要转换时使用   资源集合成一个列表,由给定的字符分隔,如此   作为逗号或空格,或相反地,例如转换文件列表   在FileList中进入路径。

这对我来说并不清楚...阅读 ResourceCollections 的文档是一组资源

这个脚本部分究竟是什么?什么是 project.classpath ? (我无法在我的属性文件中找到它)

TNX

安德烈

1 个答案:

答案 0 :(得分:2)

这段脚本定义了属性jar.classpath

jar.classpath的值计算如下:

  • 它从project.classpath资源开始(project.classpath可能是一个类路径容器。这意味着它包含一组指向某些jar或目录的路径元素)
  • chainedmapper适用于project.classpath
  • 在您的示例代码中,chainedmapper是一个2步映射器:

第1步:flattenmapper:从path元素中删除所有目录信息。因此,表示此文件dir1/dir2/lib1.jar的路径元素将转换为lib1.jar

第2步:globmapper:将使用lib/为step1产生的每个路径元素添加前缀。因此lib1.jar将成为lib/lib1.jar

正如我所说:此转换的结果存储在jar.classpath

这段脚本不会移动或复制任何文件。它只是一个类路径容器转换。您可能有一些其他目标将所有必需的lib放在目录lib/中,以便在使用jar.classpath时(可能在javac任务中)它将指向现有的jar文件。

备注project.classpath:它可能是由构建文件中某处的<path id="project.classpath">...</path>定义的。即,它不是您在属性文件中找到的属性。