在Ant中创建一个空的占位符文件集

所以,情况如下:我有一个定义编译任务的父构建文件,我希望子构建文件可以选择性地向该编译任务使用的类路径添加更多的JAR(可能位于任何位置)。

并非所有的子构建文件都具有这些附加的依赖关系,所以我不想强制它们定义附加的依赖关系文件集。 他们应该能够包含父项,并且编译任务应该可以工作。

(显然还有其他必需的属性可以配置源目录等等,但是它们并没有涉及到这一点,而且实际的包含/继承问题稍微复杂一些,但希望无论什么是简单的案件也将在复杂的案件中起作用。)

我有一些工作原理:父构建文件中的编译任务引用附加的依赖文件集,无论如何:

<target name="compile" depends="init-additional-dependencies">
  <fileset id="global.dependency.fileset" dir="${global.library.directory}">
     <include name="**/*.jar"/>
  </fileset>
  <javac ...>
    <classpath>
      <!-- should be the same for all buildfiles -->
      <fileset refid="global.dependency.fileset"/>

      <!-- should be populated by child buildfiles -->
      <fileset refid="additional.dependency.fileset"/>
    </classpath>
  </javac>
</target>

...并且父构建文件还有一个创建此文件集的任务,为空,以便javac不会炸毁。 但是,我创建空文件集的方式是dopey:

<target name="init-additional-dependencies">
  <!-- override me! -->
  <fileset id="additional.dependency.fileset" dir=".">
    <include name="placeholder.does.not.exist.so.fileset.is.empty"/>
  </fileset>
</target>

这有效,但似乎愚蠢,很难相信没有更好的方法。 什么是更好的方法?


我不认为有关这方面的讨论太多,所以不存在这样的“公约”。 因此,文件集的工作方式排除了“王牌”包含

<fileset refid="additional.dependency.fileset" dir="." excludes="**" />

应该始终是空的。 这对于占位符文件名称技术以及占位符目录名称和erroronmissingdir方法来说似乎稍微可取。

出现问题的原因是,默认情况下,隐式包含文件集父目录下的所有文件。 另一种选择 - 可能不是直接用于你的情况 - 是使用filelist 。 因为文件列表是从明确命名的文件构建的,所以如果您不指定任何名称,它们就是空的。

<filelist id="additional.dependency.filelist" />

通过概括,如果您修改类路径以使用resources ,则可以混合使用文件集和文件列表:

<filelist id="additional.dependency.resources" />

...

<classpath>
      <!-- should be the same for all buildfiles -->
      <fileset refid="global.dependency.fileset"/>

      <!-- should be populated by child buildfiles -->
      <resources refid="additional.dependency.resources"/>
</classpath>

引用additional.dependency.resources可以是文件集或文件列表(包括空文件列表)或任何其他基于文件的资源集合。


在父级构建文件中添加:

<fileset id="additional.dependency.fileset" erroronmissingdir="false" dir="noop" />

对于需要添加其他工件的子项,请在子构建文件中定义文件集:

<fileset id="additional.dependency.fileset" dir="..." includes="..." />
链接地址: http://www.djcxy.com/p/10353.html

上一篇: Creating an empty placeholder fileset in Ant

下一篇: in Rails where do you put your Sweepers?