2010-02-04 51 views
2

是否可以執行以下操作?有條件地包含文件集中的文件

<target name="path-test"> 
    <property name="d.file" value="ant/d.fileset" /> 
    <property name="c.file" value="ant/c.fileset" /> 
    <property name="e.file" value="ant/e.fileset" /> 

    <available property="c.file.exists" file="${c.file}" /> 
    <available property="d.file.exists" file="${d.file}" /> 
    <available property="e.file.exists" file="${e.file}" /> 

    <path id="classPathRef"> 
    <fileset dir="${depot.dir}"> 
     <include name="${c.file}" if="c.file.exists" /> 
     <include name="${d.file}" if="d.file.exists" /> 
     <include name="${e.file}" if="e.file.exists" /> 
    </fileset> 
    </path> 
</target> 

在這種情況下,每個文件集的文件將包含,我想在classPathRef落得罐子的列表。

回答

4

Doh!

<target name="path-test"> 
    <property name="d.file" value="ant/d.fileset" /> 
    <property name="c.file" value="ant/c.fileset" /> 
    <property name="e.file" value="ant/e.fileset" /> 

    <available property="c.file.exists" file="${c.file}" /> 
    <available property="d.file.exists" file="${d.file}" /> 
    <available property="e.file.exists" file="${e.file}" /> 

    <path id="classPathRef"> 
    <fileset dir="${depot.dir}"> 
     <includesfile name="${c.file}" if="c.file.exists" /> 
     <includesfile name="${d.file}" if="d.file.exists" /> 
     <includesfile name="${e.file}" if="e.file.exists" /> 
    </fileset> 
    </path> 
</target> 
1

我建議檢查使用常春藤來管理你的類路徑。

在生成文件中使用檢索命令將JAR複製到專用目錄:

<ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]"/> 

注意的conf參數。這指的是常春藤配置(類似於Maven中的範圍)。它可以讓你分類你依賴的每個罐子。

現在罐子每個集合位於交通方便的在不同的目錄中生成文件路徑的聲明變得微不足道:

<path id="compile.path"> 
    <fileset dir="${lib.dir}/compile"/> 
</path> 

<path id="test.path"> 
    <fileset dir="${lib.dir}/test"/> 
</path> 

<path id="runtime.path"> 
    <fileset dir="${lib.dir}/runtime"/> 
</path> 

的定義罐子集團的複雜性被委派給常春藤和它的配置管理:

這裏的文件控制的ivy.xml的例子

<ivy-module version="2.0"> 
    <info organisation="apache" module="hello-ivy"/> 
    <configurations> 
     <conf name="compile" description="Libraries needed for compilation"/> 
     <conf name="runtime" extends="compile" description="Libraries that should be included when deploying the code" /> 
     <conf name="test" extends="runtime" description="Additional test libraries, not deployed" /> 
    </configurations> 
    <dependencies> 
     <dependency org="commons-lang" name="commons-lang" rev="2.0" conf="build->default"/> 
     <dependency org="commons-cli" name="commons-cli" rev="1.0" conf="build->default"/> 
     <dependency org="junit" name="junit" rev="4.7" conf="test->default"/> 
    </dependencies> 
</ivy-module> 

魔術比特是與每個依賴關聯的屬性。例如,Junit已被宣佈爲測試的一部分,這意味着它只出現在測試路徑中。由於聲明配置的方式,其他將出現在所有3條路徑中。

相關問題