Ant <import>与<include>任务

Dav*_* W. 25 ant import include

我现在看到Ant既有<include>任务也有<import>任务.

根据描述:

包括

将另一个构建文件包含到当前项目中.

进口

将另一个构建文件导入当前项目.

那么,为什么要使用一个呢?

这是我的实际问题:

在我们当前的构建系统中,我们连接了一堆JavaScripts,然后将它们最小化.JavaScripts位于十几个不同的目录中,我们从每个目录中获取批处理,并将它们连接成五个或六个超级最小化的JavaScripts.其中一些文件被复制到多个超级JavaScripts中.

为了使调试更容易,并且构建更灵活,我想将所有文件复制到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>
Run Code Online (Sandbox Code Playgroud)

我看到有四种可能性:

  • 使用<ant/>调用该做复印的文件
  • 使用<import/>(可能无效,因为它可能无法包含在目标中)
  • 使用<include/>(可能无效,因为它可能无法包含在目标中)
  • 使用实体包含.

我从不为使用而疯狂,<ant/>或者<antcall>虽然这可能是一个很好的时机.实体包含的想法是可行的,但这是大多数人不理解的东西,我担心它会给那些必须支持我正在做的事情的人造成混乱.该<import><include>可能无法在这种情况下使用,但我还是好奇的区别是什么.

Dan*_*lan 33

导入文档解释了差异:

进口与包含有何不同?

简短版本:如果要覆盖目标,请使用import,否则使用include.

使用导入时,导入的目标最多可以使用两个名称.它们的"普通"名称没有任何前缀,可能带有前缀名称(as属性的值或导入项目的name属性,如果有的话).

使用时,包含的目标仅以前缀形式提供.

使用导入时,导入的目标的depends属性保持不变,即它使用"普通"名称,并允许您覆盖依赖项列表中的目标.

使用include时,无法覆盖包含的目标,并重写其depends属性,以便使用带前缀的名称.这允许包含文件的编写者控制作为依赖项的一部分调用哪个目标.

通过使用不同的前缀可以多次包含同一个文件,不可能多次导入同一个文件.