ant copy

ant copy 復(fù)制文件

在用Ant部署時(shí),出現(xiàn):“警告: 編碼 GBK 的不可映射字符”,網(wǎng)上找了一下,主要是編碼兼容性的問題,需要個(gè)javac指定編碼,于是在build.xml中加入以下說明即可:

<target name="compile" depends="prepare" description="編繹">
<javac srcdir="{src.dir}" destdir="{build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="**">

<compilerarg line="-encoding UTF-8 "/>
<classpath refid="build.classpath" />
</javac>
</target>

  1. 拷貝單個(gè)文件到指定目錄下。
    例:<copy todir="{basedir}/new" file="{basedir}/old/old1.txt1">
    {basedir}/old/old.txt文件拷貝到{basedir}/new下

  2. 拷貝一批文件到指定目錄下
    例:<copy todir="{basedir}/new"> <fileset dir="{basedir}/old">
    <include name="old1.txt" />
    <include name="old2.txt" />
    <exclude name="old8.txt" />
    </fileset>
    </copy>
    這里fileset定義的是原文件的組成形式,<include/>子屬性表示包括,<exclude/>子屬性表示排除,很簡單,通過他們組合實(shí)現(xiàn)多文件的篩選,當(dāng)然我這個(gè)例子用得很傻。比如
    <include name="appgen/"/>
    <include name="ibatis/
    "/>
    <exclude name="*/.log"/>
    拷貝appget目錄和ibatis目錄下除了.log文件以外的其它所有文件和子目錄。

    可以把<fileset/>簡寫成<fileset dir="${basedir}/old" includes="old1.txt,old2.txt" />,includes可以理解成include的復(fù)數(shù)形式,包含多個(gè)文件時(shí)用逗號(hào)隔開,excludes也一樣。
    
  3. 拷貝一個(gè)目錄到指定目錄下
    例:<copy todir="{basedir}/new"> <fileset dir="{basedir}/old">
    <include name="appgen" />
    <include name="appgen/" />
    <include name=appgen/" />
    <include name="appgen/
    " />
    </fileset>
    </copy>
    同樣使用<fileset/>屬性,name指定目錄名,不過這里要分兩種情況,用<include/>子屬性和不用<include/>子屬性.
    若使用<include/>, 又要分三種情況
    若是“appgen”,則只會(huì)拷貝名為appgen的空目錄過去,它里面的文件和子目錄則不會(huì)拷貝。
    若是“appgen/”,或“appgen/
    ”,則會(huì)把整個(gè)appgen目錄拷貝過去,包括里面的文件和子目錄。
    若是“appgen/
    ”,則只會(huì)把該目錄和該目錄下第一級(jí)子目錄的所有東西拷貝過去,而不會(huì)拷貝第二級(jí)和第二級(jí)以下的。注:“appgen/”這兒是一個(gè)號(hào),號(hào)若大于兩個(gè),也跟一個(gè)號(hào)是同樣效果。比如“appgen/*”和“appgen/****”都只拷貝appgen目錄下第一級(jí)子目錄。

注:若appeng這個(gè)目錄本身就是個(gè)空目錄,無論怎么寫,這個(gè)空目錄都不會(huì)被拷貝。也就是說,copy操作不會(huì)產(chǎn)生創(chuàng)建空目錄的作用,要想創(chuàng)建空目錄,只有用mkdir。

   若不使用任何<include>屬性,如
       <fileset dir="${basedir}/old">
       </fileset>
   則會(huì)拷貝${basedir}/old下的所有文件和子目錄。

注:使用<exclude/>排除目錄時(shí),目錄名必須寫成“appgen/”或“appgen/**”形式,否則不會(huì)生效。

   以上是三種拷貝到目錄的種類,注意如果計(jì)算機(jī)中沒有todir指定的路徑,ant將會(huì)自動(dòng)創(chuàng)建這個(gè)路徑。
  1. 拷貝單個(gè)的文件:
    〈copy tofile="old.txt" file="new.txt" /〉就這么簡單就行了。
    當(dāng)然也可以寫成
    <copy tofile="{basedir}/new/new.txt"> <fileset dir="{basedir}/old" includes="old.txt" />
    </copy>
    這里includes就只能寫一個(gè)文件,不能寫上多個(gè)文件,因?yàn)椴荒軐⒍鄠€(gè)文件復(fù)制到一個(gè)文件中去,所以這樣麻煩的寫法是沒有意義的。

Copy Task的屬性及功能

Copy 任務(wù)具有以下屬性:

(1)file:用于指定要復(fù)制的源文件。

(2)preservelastmodified:作用是使得復(fù)制后的文件與源文件的最后修改時(shí)間相同。默認(rèn)為false。

(3)tofile:用于指定要復(fù)制到的文件。

(4)todir:用于指定要復(fù)制到的目標(biāo)目錄。todir和tofile只能使用其中一個(gè)屬性。

(5)overwrite:用于指定是否需要覆蓋目錄和文件,不管文件是否比源文件新,都會(huì)覆蓋。默認(rèn)為false。

(6)filtering:用于指定在復(fù)制時(shí)是否使用構(gòu)件文件的全局過濾器對(duì)文件進(jìn)行過濾。默認(rèn)為false。

(7)flatten:用于指定是否需要復(fù)制目錄,如果為true代表把所有的文件復(fù)制到todir屬性設(shè)定的目錄下。默認(rèn)為false,復(fù)制目錄。

(8)includeEmptyDirs:用于指定是否復(fù)制空目錄。默認(rèn)為true。

(9)failonerror:用于指定當(dāng)遇到錯(cuò)誤時(shí)是否停止執(zhí)行。默認(rèn)為true。

(10)verbose:用于指定當(dāng)復(fù)制文件時(shí)是否記錄日志信息。

(11)encoding:用于設(shè)定復(fù)制文件時(shí)的編碼或文件過濾器使用的編碼方式。默認(rèn)時(shí)使用Java虛擬機(jī)的編碼方式。

(12)outputencoding:指定寫文件時(shí)的編碼方式。默認(rèn)時(shí)使用Java虛擬機(jī)的編碼方式。

(13)enablemultiplemappings:用于設(shè)定是否允許多個(gè)映射。默認(rèn)為false。

(14)granularity:用于指定一個(gè)文件修改時(shí)間的毫秒數(shù)據(jù)的允許誤差。因?yàn)椴皇撬械奈募到y(tǒng)的修改時(shí)間都是精確到毫秒數(shù)。默認(rèn)時(shí)為0,如果為DOS系統(tǒng)則為2。

在執(zhí)行Copy Task時(shí)使用文件過濾的實(shí)例

下面是一個(gè)復(fù)制文件的同時(shí)替換文件中的特殊符號(hào)的例子:

<copy todir="../backup/dir">

<fileset dir="src_dir"/>

<filterset>

  <filter token="TITLE" value="Foo Bar"/>

</filterset>

</copy>

這個(gè)例子的作用是把src_dir目錄下的所有文件復(fù)制到../backup/dir目錄,并在所有文件中查找并替換@TITLE@為Foo Bar。當(dāng)要進(jìn)行新產(chǎn)品發(fā)布時(shí)通過需要替換文件中的版本信息和時(shí)間信息。

說明:在Ant工具中還提供了copydir和copyfile這兩個(gè)特定的任務(wù),分別用于對(duì)目錄和文件進(jìn)行復(fù)制。但自從有了Copy任務(wù)后,這兩個(gè)任務(wù)已過期,不建議再使用,應(yīng)該統(tǒng)一使用Copy任務(wù)。

小例:從工作空間復(fù)制到Tomcat 里面去

<?xml version="1.0" encoding="UTF-8"?>
<project name="" default="lch" basedir=".">
<property name="db_file_dir" value="C:/Users/Administrator/workspace/gdagri/WebRoot/WEB-INF/classes/gznxt/database/"/>
<property name="row_file_dir" value="C:/Users/Administrator/workspace/gdagri/WebRoot/WEB-INF/classes/gznxt/entity/"/>
<property name="to_db_dir" value="D:/tool/apache-tomcat-5.5.26/webapps/gdnyw/WEB-INF/classes/gznxt/database/"/>
<property name="to_row_dir" value="D:/tool/apache-tomcat-5.5.26/webapps/gdnyw/WEB-INF/classes/gznxt/entity/"/>

<target name="lch_1" >
<copy todir="{to_row_dir}"> <fileset dir="{row_file_dir}">
<include name="TransportGoodsRow.class"/>
<include name="TransportCartRow.class"/>
</fileset>
</copy>
</target>

<target name="lch" >
    <copy todir="${to_db_dir}" overwrite="true">
        <fileset dir="${db_file_dir}">
            <include name="TransportCartDB.class"/>
            <include name="TransportGoodsDB.class"/>
        </fileset>
    </copy>
</target>

</project>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容