1

我是 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 或仅引用一个 ResourceCollections 转换为特定平台的路径形式,可选择将结果存储到给定属性中。当您需要将资源集合转换为列表时,也可以使用它,由给定字符(例如逗号或空格)分隔,或者相反,例如将 FileList 中的文件列表转换为路径。

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

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

肿瘤坏死因子

安德烈亚

4

1 回答 1

2

这段脚本正在定义属性jar.classpath

的值jar.classpath计算如下

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

第 1 步:flattenmapper:从路径元素中删除所有目录信息。所以表示这个文件的路径元素dir1/dir2/lib1.jar被转换为lib1.jar

第 2 步: globmapper :将为 step1 生成的每个路径元素添加前缀lib/。所以lib1.jar会变成lib/lib1.jar

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

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

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

于 2013-10-14T12:00:53.020 回答