我知道如何使用Ant來複制文件和文件夾,但是我感興趣的是如果以及如何讓javac任務可以複製它正在編譯的相同源輸出目錄。如何將.java源文件複製到Ant javac destFolder
基本上,它與將源代碼包含在jar任務中的選項非常相似。
我知道如何使用Ant來複制文件和文件夾,但是我感興趣的是如果以及如何讓javac任務可以複製它正在編譯的相同源輸出目錄。如何將.java源文件複製到Ant javac destFolder
基本上,它與將源代碼包含在jar任務中的選項非常相似。
甚至可以使用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>
我發現螞蟻網站這個答案(你可以刪除「排除」部分中的.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中。
我想他只想複製已編譯的源文件。 – aioobe 2010-06-01 09:21:51
感謝您的輸入,我會看看宏,但是我真正感興趣的是如果這可能作爲ant的javac任務的一部分內置作爲參數。我會等待,看看我是否得到任何我想要的答案,如果沒有,我會接受你的答案。 順便說一句,什麼是arginclude? @aioobe,我真的不在乎只複製已編譯的源文件,因爲我刪除了所有的類,並且每次出於不同的原因將它們編譯在一起。 – Ittai 2010-06-01 10:51:42
@Ittai在javac任務中沒有這樣的內容,但是,仍然可以通過使用相同的'srcdir'和'destdir'來實現:這樣,類文件將與源文件位於同一個目錄中。然後從那裏建立你的jar。 – tonio 2010-06-01 11:42:23