2012-08-17 93 views
1

我想寫一個簡單的ANT腳本將文件/文件夾複製到指定的目錄。例如,通過運行:ANT腳本移動指定的文件

ant deploy src/classes/myClass.class 

文件 「myClass.class」 是從 「SRC /類/」 到 「部署/ SRC /類/」 複製。此外,這應爲一個指定的文件夾,以便運行工作:

ant deploy src/classes/ 

如果所有文件的src /類複製」到‘部署/ src目錄/班’此外,目標文件夾將不存在前腳本然因此需要首先「觸摸」...

從環顧複製文件不是真的問題,但我不知道如何得到這個與參數(如上所述)...

有沒有人知道這可以如何激活?

回答

0

爲什麼不'你在shell腳本中使用老式的cp而不是螞蟻腳本? cp -r將允許你遞歸地複製目錄...

0

要以螞蟻從控制檯需要使用螞蟻提供屬性值,你可以用-D前綴通過他們,所以你必須調用作爲構建: 螞蟻-Ddst = deploy -Dsrc = src/classes/ (也建議切換src和dst位置 - 如cp命令) 在build.xml中,您可以訪問${dst}${src}這些屬性。

我這是不是你,那麼你需要做螞蟻的新入口點類的螞蟻,並呼籲

ant -main <YourClass> arg2 arg3 

例西裝是here(第一個例子)

1

Ant是不是一種計算機語言。這是一種矩陣依賴語言。

區別很微妙:編程語言更加靈活,但您必須告訴它每一步和每一步。矩陣依賴語言計算出執行順序。

它可能是一個微妙但重要的區別。在標準的Ant中,像while循環,for循環和if/then語句這樣的基本控制結構缺失。

聽起來你想用標準的計算機語言來做什麼會容易得多。也許Python,Perl,甚至是一個shell腳本。

在命令行鍵入「ant -help」,你會發現沒有真正的方法可以像使用常規編程語言一樣將參數傳遞到Ant中。相反,你可以在命令行上性能螞蟻就可以使用:

$ant -Ddeploy.classfile=src/classes/myClass.class deploy 

的-D允許您設置一個屬性調用部署任務時。然後,您可以使用deploy.classfile屬性在您的目標中使用它在Ant 任務中。我會粗略估計,即使是這樣一個簡單的構建。xml文件需要大約20到30行。特別是你會給它一個類文件或一個目錄,你必須以不同的方式處理它們,這需要第二個目標。不僅如此,而且很難理解工作流程。

這是一個想法,爲什麼不在<javac>任務中使用destdir目標,首先在deploy目錄中創建所需的*.class文件。 Ant的主要做法之一是將您構建的文件從存儲庫中的文件中分離出來。它使清理變得非常容易。另外,<javac>任務知道不要爲尚未更改的源文件重建類文件。

<target name="compile" 
    description="Compile your source files"> 

    <property name="main.destdir" value="${basedir}/deploy/classes"/> 
    <property name="main.srcdir" value="${basedir}/src"/> 

    <path id="main.classpath"> 
     <fileset dir="${basedir}/lib/> 
    </path> 

    <javac srcdir="${main.srcdir}" 
     destdir="${main.destdir}" 
     classpathref="main.classpath"/> 
</target> 

現在,您不必將文件從源目錄複製到您的部署目錄。更好的是,<javac>不會重新編譯未更改的源文件。讓Ant完成它所設計的任務,以及其他任何事情,使用一種好的腳本語言。

1

如果你沒有改變你的輸入命令行字符串的問題,這是應該工作的東西。

<?xml version="1.0" encoding="UTF-8" ?> 
<project name="Deploy" default="copy"> 

    <!-- 
     This script is called in the following manner: 

     ant deploy -Dsource.dir=src/classes  (to copy the entire directory) 
     ant deploy -Dsource.dir=src/classes -Dsource.module=myClass.class 
               (to copy one class) 

    --> 

    <!-- <property name="source.dir" value="src/com/ggl/unzip" /> --> 
    <!-- <property name="source.module" value="myClass.class" /> --> 

    <target name="copy"> 
     <condition property="source.module.text" value="all files"> 
      <not> 
       <isset property="source.module" /> 
      </not> 
     </condition> 

     <condition property="source.module" value="**.*"> 
      <not> 
       <isset property="source.module" /> 
      </not> 
     </condition> 

     <property name="source.module.text" value="${source.module}" /> 

     <echo>Copying ${source.module.text} from ${source.dir} to deploy/${source.dir}</echo> 

     <copy todir="deploy/${source.dir}" overwrite="true" verbose="true"> 
      <fileset dir="${source.dir}"> 
       <include name="${source.module}" /> 
      </fileset> 
     </copy> 
    </target> 

</project>