我现在看到 Ant 既有<include>
任务和一个<import>
task.
根据描述:
Include
将另一个构建文件包含到当前项目中。
and
Import
将另一个构建文件导入到当前项目中。
那么,为什么要使用其中一种而不是另一种呢?
这是我的实际问题:
在我们当前的构建系统中,我们连接一堆 JavaScript,然后最小化它们。 JavaScript 位于十几个不同的目录中,我们从每个目录中批量获取并将它们连接成五到六个超级最小化的 JavaScript。其中一些文件被复制到多个超级 JavaScript 中。
为了使调试更容易,并且构建更灵活,我想将所有文件复制到target/work/resources2
目录下的每个子目录代表不同的超级最小化 JavaScript。出于调试目的,我们将包含非最小化的超级 JavaScript 和原始版本。构建脚本并不复杂,但整个部分占用了很多行。我正在考虑把<copy>
填充到一个单独的 XML 文件中,所以整个事情看起来像这样:
<target name="process-resources"
description="Concatenate and minimize the JavaScripts (using Maven lifecycle names for our targets">
<!-- The following include the copying stuff -->
<here.be.dragons file="${basedir}/reservations.xml"/>
<here.be.dragons file="${basedir}/date.xml"/>
<here.be.dragons file="${basedir}/select.xml"/>
<for param="concat.dir">
<fileset dir="${work.dir]/resources2"/>
<sequential>
<here.I.am.concatenating.and.minimizing/>
</sequential>
</for>
</target>
我看到有四种可能性:
- Use
<ant/>
调用进行复制的文件
- Use
<import/>
(这可能不起作用,因为它可能无法包含在目标中)
- Use
<include/>
(这可能不起作用,因为它可能无法包含在目标中)
- Use the 实体包括 http://ant.apache.org/faq.html#xml-entity-include.
我从不热衷于使用<ant/>
or <antcall>
尽管现在可能是这样做的好时机。实体包含的想法会起作用,但这是大多数人不理解的事情,我担心这会给那些必须支持我正在做的事情的人带来困惑。这<import>
and <include>
在这种情况下可能无法使用,但我仍然很好奇有什么区别。
进口文件解释了差异 http://ant.apache.org/manual/Tasks/import.html:
导入与包含有何不同?
简短版本:如果您打算覆盖目标,请使用 import,否则使用 include。
使用导入时,导入的目标最多可以有两个名称。它们的“正常”名称没有任何前缀,并且可能带有前缀名称(as 属性的值或导入项目的 name 属性,如果有的话)。
使用 include 时,包含的目标仅以前缀形式可用。
使用导入时,导入目标的依赖属性保持不变,即它使用“正常”名称并允许您覆盖依赖项列表中的目标。
使用 include 时,包含的目标不能被覆盖,并且它们的依赖属性将被重写,以便使用前缀名称。这允许包含文件的编写者控制作为依赖项的一部分调用哪个目标。
可以通过使用不同的前缀多次包含同一文件,但不可能多次导入同一文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)