2013-07-30 229 views
4

我試圖理解從命令行編譯時如何工作選項-classpath從命令行編譯

我從mydirectory父嘗試:

的javac -cp mydirectory中/子目錄Hello.java

但是編譯器說:

的javac:沒有源文件

-cp-classpath)工作?我究竟做錯了什麼?

如果我讓它從subdir目錄:

的javac Hello.java

然後編譯正確。

+0

我建議讓您的命令窗口的截屏,採用LS和pwd顯示當前目錄中的文件和當前目錄的值。有太多的事情我們不得不假設或猜測你正在做什麼來了解什麼是錯的。我們還需要知道你的Hello類的包,或者你沒有的包。 – arcy

回答

0

正在編譯的文件必須直接

定義。例如,如果你在父文件夾:

javac subdir/Hello.java 

將需要進行編譯。

classpath允許找到編譯上面定義的東西所需的.class文件。

例如,如果在代碼中您有一個對類「Birds」的引用,並且該類位於當前文件夾中的名爲「animals.jar」的jar中,該文件夾是java文件所在的父文件夾,你需要這樣的:

javac -cp animals.jar subdir/Hello.java 
+0

這也取決於OP爲'Hello.java'聲明的包。 –

+0

@EricJablow True。如果包聲明沒有反映文件的位置,它會導致編譯錯誤。 –

1
javac TestProgram1.java TestProgram2.java TestProgram3.java 

您可以使用通配符來編譯一個文件夾中的所有文件,就像這樣:

javac *.java 

如果您需要在編譯了很多文件同時,但不想用aw ildcard(也許你想編譯大量的文件,但不是文件夾中的所有文件),你可以創建一個參數文件,列出要編譯的文件。在參數文件中,您可以根據需要鍵入儘可能多的文件名,使用空格或換行符分隔它們。這裏有一個名爲TestPrograms列出三個文件編譯參數文件:

TestProgram1.java 
TestProgram2.java 
TestProgram3.java 

您可以通過使用@字符編譯在這個文件中的所有程序,然後使用javac命令行參數文件的名稱,如這樣的:

javac @TestPrograms 

-cp和-classpath

指定查找用戶類文件。如果您的程序使用您存儲在單獨文件夾中的類文件,請使用此選項。

0
javac XXX.java 

命令用於編譯的Java類,其中作爲 -classpath標誌可與Java命令。

我們使用

java XXX.class 

這裏開始與main()函數運行Java程序時,JVM應該知道那裏的類文件。 所以要指定我們使用classpath的類的路徑

Classpath鏈接得到更多的細節。

一些例子爲乳寧Java程序是

java -classpath .;yourJarFile.jar your.MainClass 

java -classpath path_till_classfile/HelloWorld