2012-02-27 76 views
-1

我希望有人可以給我一個建議......如何讓JavaC將現有的類文件複製到目標目錄中?

問題

在我的項目的源目錄中的某些包包含哪些不是「的.java」 -files資源。現在我需要在那裏編譯「.class」文件。問題在於,當我構建最終的JAR時,ANT會將它過濾掉。 「.dll」和「.png」文件不會被濾除。

我該如何實現將所有內容複製到目標目錄?

我用以下Ant任務:

<javac srcdir="${src}" destdir="${temp}" target="1.5" encoding="8859_1" debug="${compile.withdebug}" > 
    <classpath refid="libs_path" /> 
</javac> 

背景

我不得不把最終JAR多個其他操作系統相關的JAR(SWT分佈)。在程序啓動時只能加載一個JAR。然而,如果沒有任何特殊的類加載器,JVM無法從JAR加載JAR。所以我將所有JAR解壓到一個包中,JVM現在可以加載它們。

爲什麼我想把它們放在源代碼(在Java包中)?因爲我想引用他們相對於助手Java類:

org.example.swt_jars\ 
    swt_linux_32\ 
    swt_linux_64\ 
    swt_win_32\ 
    swt_win_64\ 
    SWTJarsResources.java 

謝謝!

+0

你可能想看'ant'' copy'任務:http://ant.apache.org/manual/Tasks/copy.html – 2012-02-27 16:37:02

+0

「Andrzej Doyle已經回答了原始問題」 - 不要移動球門柱。如果您的問題得到正確答覆,請接受答案並提出一個新問題。 – millimoose 2012-02-27 17:42:24

+0

好的。 http://stackoverflow.com/questions/9469882/how-to-make-eclipse-compiler-copy-existing-class-files-to-the-target-dir – Andrej 2012-02-27 18:05:00

回答

1

Javac是一個編譯器;讓它移動文件是使用錯誤的工具來完成這項工作。

我會建議在<javac>任務之前或之後直接使用Ant copy task來移動現有的類文件。喜歡的東西:

<copy todir="${temp}"> 
    <fileset dir="${src}"> 
     <include name="**/*.class" /> 
    </fileset> 
</copy> 

編輯 Eclipse的:你真正想做這裏沒有Eclipse複製文件,但必須認識到,存在着階級存在,它需要以供參考。因此,最簡單的方法和我首先嚐試的方法是將src目錄標記爲包含類別以及包含來源的的目錄。

我不知道這是否適用於Eclipse - 例如IDEA不會讓文件夾以這種方式用作雙重用途。再說一次,它看起來並不是很適合這項工作的工具,因爲IDE構建只是整理它運行應用程序所需的二進制文件,並且基於某些項目設置複製文件似乎是錯誤的

最終我不認爲你的設計是最乾淨的,混合類與源文件可能會混淆。我很欣賞你這樣做,因爲你想使用相對引用,但也許你應該從文件系統本身抽象出來並使用Classloader.findResource()(或者可能是getResourceAsStream())。這樣,您可以根據需要安排文件,只要您在類路徑中使用這兩個目錄運行應用程序,Java就能夠找到您之後的資源。這將爲您提供更大的靈活性,以及​​解決這種特殊情況。

+0

謝謝,它的工作原理。 – Andrej 2012-02-27 16:45:49

+0

現在我遇到了類似Eclipse的問題 - 它不會在編譯源代碼時複製.class文件...您介意我是否重新打開這個問題? – Andrej 2012-02-27 17:13:28

+0

感謝您的意見。我會試一試。還有一個問題:你寫道:「只要你在類路徑中使用兩個目錄運行你的應用程序」。我需要在最終的JAR中集成多個swt_xxx.jar文件。但是在運行時,我只需要其中的一個在類路徑中可用。有一些自定義類加載器的解決方案,但我覺得它們太複雜。 – Andrej 2012-02-27 18:34:10

相關問題