2015-09-11 23 views
1

我一直試圖讓以下工作在螞蟻,但一直未能。更新一個丟失文件並設置一個屬性的目標目錄

這種情況下,我希望能夠根據來自源目錄的任何文件是否被複制到目標目錄中來設置屬性以用於檢查。對於空目標目錄,較新版本的源文件以及源目錄中不在目標目錄中的較新文件,這應該是正確的。

我的原型build.xml文件如下:

<?xml version="1.0"?> 

<project name="build01" default="make.obj"> 
    <property name="src.dir" value="${basedir}/src"/> 
    <property name="obj.dir" value="${basedir}/obj"/> 
    <fileset id="src.files" dir="${src.dir}"/> 

    <target name="make.obj" depends="check.make.obj" unless="make.obj.notneeded"> 
    <copy todir="${obj.dir}"> 
     <fileset refid="src.files"/> 
    </copy> 
    <property name="do.something.else" value="true"/> 
    </target> 

    <target name="check.make.obj"> 
    </target> 

    <target name="make.final" depends="make.obj" unless="do.something.else"> 
    <exec executable="mkisofs"> 
     <arg value="-o"/> 
     <arg value="foo.iso"/> 
     <arg value="obj"/> 
    </exec> 
    </target> 
</project> 

我的原型構建目錄最初看起來如下:

. 
+ build.xml 
+ obj 
+ src 
    + file01.txt 
    + file02.txt 

螞蟻最初的電話後,我想看看下面的:

. 
+ build.xml 
+ foo.iso 
+ obj 
| + file01.txt 
| + file02.txt 
+ src 
    + file01.txt 
    + file02.txt 

如果我再次運行螞蟻,而沒有做任何改變,我不希望螞蟻更新obj目錄或重製foo.iso。

如果我更新src/file01.txt,src/file02.txt,或者添加一個文件(例如src/file03.txt),我想讓ant更新obj目錄,並且我想讓ant重製foo.iso 。

我已經嘗試了不同的任務,但我無法獲得任何正確的工作。

有什麼建議嗎?

回答

1

替換此:

<property name="do.something.else" value="true"/> 

與此:

<uptodate targetfile="foo.iso" property="do.something.else"> 
    <srcfiles dir="${obj.dir}"/> 
</uptodate> 

<uptodate>如果目標存在,並且比源(一個或多個)新的設置屬性。

+0

我已經嘗試過各種任務,但我沒有任何工作。我想我可以使用來檢查哪些源文件比等效的目標文件更新,但我無法讓它工作。我知道單個目標文件屬性起作用,但雖然此示例着重於製作ISO,但在構建將在目標文件和源文件之間存在依賴關係的ISO後,我還想做其他事情。所以,真的想用來比較源和目標。 –

+0

也許你可以用一個更具代表性的例子更新你的問題?我想[](https://ant.apache.org/manual/Tasks/dependset.html)可能會對你有所幫助,但我並不完全明白你需要什麼。 – VGR

0

爲了澄清,總是下列返回true

<target name="make.final"> 
    <echo message="Inside make.final"/> 
    <uptodate property="copy.notneeded"> 
     <srcfiles dir="src" includes="file01.txt"/> 
     <mapper type="glob" from="src/*" to="obj/*"/> 
    </uptodate> 
    <echo message="copy.notneeded=${copy.notneeded}"/> 
    </target> 

如果obj的目錄存在與否,或者是否全部來自SRC文件的OBJ已經存在沒關係。

我也嘗試用「正則表達式」替換「glob」,這似乎也不工作。

相關問題