Ant <import>与<include>任务</include> </import>

时间:2013-01-07 20:14:53

标签: 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>

我看到有四种可能性:

  • 使用<ant/>调用执行复制的文件
  • 使用<import/>(可能无效,因为它可能无法包含在目标中)
  • 使用<include/>(可能无效,因为它可能无法包含在目标中)
  • 使用Entity Include

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

1 个答案:

答案 0 :(得分:32)

The documentation of import explains the difference

如何导入与include不同?

  

简短版本:如果您想覆盖目标,请使用import,否则请使用include。

     

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

     

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

     

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

     

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

     

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