2010-06-01 38 views
4

我知道如何使用Ant來複制文件和文件夾,但是我感興趣的是如果以及如何讓javac任務可以複製它正在編譯的相同源輸出目錄。如何將.java源文件複製到Ant javac destFolder

基本上,它與將源代碼包含在jar任務中的選項非常相似。

回答

2

爲什麼不簡單地使用copy任務,以及javac呢?

甚至可以使用ant的宏來定義自己的copyingjavac任務,該任務執行兩個操作,唯一的問題是正確處理文件集,精確地複製正在編譯的文件集。

如果您只想在編譯成功時複製文件,則必須構建自定義的ant任務(擴展默認的javac任務),或者使用ant_contrib foreach任務來玩。

的macrodef可能看起來像:

<macrodef name="copyingjavac"> 
    <attribute name="srcdir"/> 
    <attribute name="destdir""/> 
    <element name="arginclude"/> 
    <sequential> 
    <javac srcdir="@{srcdir}" destdir="@{destdir}" updatedProperty="build.success"> 
     <arginclude/> 
    </javac> 
    <copy todir="@{destdir}"> 
     <fileset dir="@{srcdir}"> 
     <arginclude/> 
     </fileset> 
    </copy> 
    <fail unless="build.success"> 
     Build failed. Check the output... 
    </fail> 
    </sequential> 
</macrodef> 
+0

我想他只想複製已編譯的源文件。 – aioobe 2010-06-01 09:21:51

+0

感謝您的輸入,我會看看宏,但是我真正感興趣的是如果這可能作爲ant的javac任務的一部分內置作爲參數。我會等待,看看我是否得到任何我想要的答案,如果沒有,我會接受你的答案。 順便說一句,什麼是arginclude? @aioobe,我真的不在乎只複製已編譯的源文件,因爲我刪除了所有的類,並且每次出於不同的原因將它們編譯在一起。 – Ittai 2010-06-01 10:51:42

+0

@Ittai在javac任務中沒有這樣的內容,但是,仍然可以通過使用相同的'srcdir'和'destdir'來實現:這樣,類文件將與源文件位於同一個目錄中。然後從那裏建立你的jar。 – tonio 2010-06-01 11:42:23

2

我發現螞蟻網站這個答案(你可以刪除「排除」部分中的.java源沿着編譯版本拷貝):

... 
<target name="compile"> 
    <mkdir dir="${classes.dir}"/> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/> 
    <copy todir="${classes.dir}"> 
     <fileset dir="${src.dir}" excludes="**/*.java"/> 
    </copy> 
</target> 
... 

這會將所有資源(只要它們沒有後綴「.java」)複製到構建目錄中,因此我們可以從該目錄啓動應用程序,並將這些文件包含到jar中。

相關問題