我有一個Ant任務定義,像這樣:ANT javac的和特殊字符
<javac source="1.5" target="1.5" srcdir="${src.dir}" destdir="${classes.dir}" deprecation="on" debug="on" classpathref="classpath" fork="true" memoryMaximumSize="512m" encoding="UTF-8">
<include name="${app.directory}/**/*.java"/>
</javac>
這工作得很好,但是當我有在其名稱中的特殊字符類它給了我下面的錯誤:
[iosession] Compiling 131 source files to /C24/PUB/io-stds/trunk/standards/GSIT/build/test/deployment/build/classes
[iosession] javac: file not found: /C24/PUB/io-stds/trunk/standards/GSIT/build/test/deployment/src/java/biz/c24/io/minos/AléaChiffréClass.java
[iosession] Usage: javac <options> <source files>
[iosession] use -help for a list of possible options
[iosession] Target compile finished
[iosession]
[iosession] Building unsuccessful 2 seconds
當我刪除「fork = true」時,它可以工作,但它忽略了「memoryMaximumSize」設置。我也試過嵌套的方法,但無濟於事。
任何想法?
這裏的問題是,在fork = true的情況下,文件名需要通過操作系統作爲命令行參數傳遞給被調用的'javac'進程。這意味着在螞蟻虛擬機中將字符串轉換爲字節,而在javac虛擬機中則轉換爲另一個字節。 我想這兩個以某種方式使用不同的編碼。 (雖然他們都使用默認編碼,但無法指示編碼)。但我並沒有真正的解決方案。 –
我不知道這是怎麼發生的,但正如Ebermann所說,這是兩個java進程的編碼問題。所以我認爲你可以試試這個:1.使用嵌套的exec任務來執行javac。 2.你也可以嘗試編寫一個自定義任務,使用ProcessBuilder調用javac,這也允許設置env。 |||||在編寫調用本地svn客戶端的svninfo任務時,我有第二種方法的經驗。 –
coolcfan