2011-05-07 40 views
1

我編譯的程序有一個package語句。 例如java編譯器選項,即javac -d

package APPC_LU62.Runtime ; 

我也有一個預先存在的與package語句相匹配的目錄結構。

C:\APPC_LU62\Runtime 

如何讓javac編譯器在預先存在的目錄結構中創建相同的目錄結構?即

C:\APPC_LU62\Runtime\APPC_LU62\Runtime 

在我看來,編譯器應該是足夠「智能」首先要檢查現有的目錄結構創建一個之前。

感謝

回答

5

一般來說,編譯器期望的源文件,並根據包結構輸出類文件。

如果您沒有提供任何-sourcepath(或-classpath,如果沒有給出源路徑)選項,則相對於當前目錄搜索源文件。如果給出了一個源路徑,則相對於該路徑搜索源文件(除了在命令行上直接指定的任何文件外)。

同樣,如果您沒有指定任何-d選項,則類文件將根據相對於當前目錄的包結構放入目錄中。如果您給出-d選項,則類文件將相對於該選項給出的目錄進行放置。這裏將創建不存在的目錄。因此,如果您想在源文件所在的目錄樹中創建輸出,通常的做法是更改爲此樹的根(在您的案例中爲C:\),然後從那裏調用javac:

javac -classpath ... -sourcepath . APPC_LU62\Runtime\*.java 

(或僅列出您實際想要編譯的java文件)。或者,你可以添加-d C:\-sourcepath C:\選項,然後調用從徘徊無論你想要的命令:

javac -classpath ... -sourcepath C:\ -d C:\ C:\APPC_LU62\Runtime\*.java 

同樣是有效後來換用java命令執行類:這還預計,根據目錄中的類到包結構,其中根是類路徑中提到的目錄或jar文件。因此,您必須將C:\添加到-classpath,以便爲您的java呼叫。 (順便說一下,我不會使用某個驅動器的根作爲程序包層次結構的根目錄 - 更好地將所有目錄下移一個目錄。)

2

會更好,如果你實際上已經張貼您的javac命令,並明確提出您的來源所在,但在這裏不用反正:當你發出javac -d somedir blahblah.javajavac將創建相應的目錄結構(選配包名稱等級)起始於目錄somedir

所以你的情況,你只需要做:

javac -d c:\ your_files.java 
+0

嗨,馬特,謝謝你接受答案的「單挑」......我從來不知道這個複選標記是什麼......我不是很善於理解符號......我工作得更好用詞。但這裏是我的選擇文件的內容,我傳遞給Java編譯器: -g -verbose -deprecation -implicit:類 -classpath C:\ JVM \ ibm_sdk60 \; C:\ JVM \ CS_SNA_API_Client \; C: \ JVM \ CS_SNA_API_Client \ CPICJAVA.JAR; C:\ JVM \ CS_SNA_API_Client \ CPICJAVA.DLL -sourcepath C:\ APPC_LU62 \ Runsrc – 2011-05-07 13:04:11

+0

我想知道是否有辦法阻止編譯器創建一個新的目錄結構每次運行編譯器。如何「告訴」編譯器使用我現有的目錄結構。謝謝 – 2011-05-07 13:06:21

+0

@Guy:另一個提示:添加這樣的評論問題,那裏有一個編輯鏈接。 – 2011-05-08 01:43:12