宏定义<jar>任务的行为不像隐式文件集?

  • 本文关键字:文件 jar 任务 宏定义 ant
  • 更新时间 :
  • 英文 :


使用标准 Ant 1.9.7 组装一堆 jar 文件。 我们制作了一个宏来帮助减少 XML 的冗长程度:

<!-- All 'description' bits snipped for SO posting. -->
<macrodef name="buildjar">
... bunch of <attribute> ...
<element name="also"/>
<sequential>
<jar ....>
<manifest>  ...  </manifest>
<fileset what="stuff in every jar file" />
<fileset what="and this stuff too" />
<mappedresources if:true="beauty">
<fileset for when truth is beauty/>
<globmapper from="ugly" to="beauty"/>
</mappedresoruces>
<!-- Anything else for this specific jar. -->
<also/>
</jar>
</sequential>
</macrodef>

这有效:

<buildjar .........>
<also>
<fileset file="/some/path/somewhere/a_single_file"/>
</also>
</buildjar>

但这不会:

<buildjar .........>
<also>
<include name="/some/path/somewhere/a_single_file"/>
</also>
</buildjar>

没有错误。 查看ant -d输出,根本没有提到其他条目,在第一个示例中有一行用于fileset: Setup scanner in dir /some/path/somewhere with patternSet{ includes: [a_single_file] excludes: [] }

多个文件同上。 这有效:

<buildjar .........>
<also>
<fileset dir="/some/path/somewhere">
<include name="one_file" />
<include name="foo**" />
</fileset>
</also>
</buildjar>

但这不会:

<buildjar .........>
<also>
<include name="/some/path/somewhere/one_file"/>
<include name="/some/path/somewhere/foo**"/>
</also>
</buildjar>

根据蚂蚁手册的页面<jar>

此任务形成一个隐式文件集,并支持(dir 变为 basedir)的大多数属性以及嵌套的>、元素。

所以从理论上讲,一个<include>不应该就足够了,并成为宏<jar>的嵌套元素吗?

显然,在实践中这不是问题(我们在构建文件中打了一个 bigass 注释,告诉人们不要遗漏明确的<fileset>)。 我们不能像这样把<fileset>放到宏观定义中:

<macrodef name="buildjar">
<element name="also"/>
<sequential>
<jar ....>
.....
<!-- Anything else for this specific jar. -->
>>    <fileset dir="some_generic_base_path">
<also/>
>>    </fileset>
</jar>
</sequential>
</macrodef>

因为当调用代码执行没有任何alsobuildjar时,不受限制的文件集将包括整个some_generic_base_path树。

这仅仅是宏定义和文件集之间的某种交互让我们感到惊讶吗?

简短的回答是否定的 - 这不是宏定义问题。 若要使用隐式文件集,必须为<jar>任务指定basedir属性。 下面是一个说明这一点的示例:

<jar destfile="my.jar">
<include name="a/b" />
</jar>
<zip destfile="my.zip" >
<include name="a/b" />
</zip>

在示例中,<jar>任务将成功并创建一个仅清单 jar 文件。 但是<zip>任务将失败,说:

BUILD FAILED
build.xml:8: basedir attribute must be set, or at least one resource collection must be given!

jar 任务基于 zip 任务,并继承其对资源的检查。 因为 jar 任务有一些 - 清单 - 所以不会引发错误。

如果要使用隐式文件集,请指定basedir

相关内容

  • 没有找到相关文章

最新更新