2011-05-24 292 views
2

一些基本的Java應用程序在CentOS工作5 linux和我有我的classpath設置爲指向home/pathToJava/bin包含javacjava爲什麼這個javac:File Not Found錯誤?

和我有home/pathToFolderA/src

home/pathToFolderB/gen-java

當我.java文件運行javacjavahome/pathToFolderA/src一切正常完美

但是當我從運行在home/pathToFolderB/gen-javafileName.javajavac得到錯誤未找到文件,具體

javac: file Not found: fileName.java 
Usage: javac <options> <source files> 

爲什麼會這樣發生?

感謝所有幫助

+0

改變了目錄到同一文件夾文件你是如何在第二個目錄中運行它 - 它存在那裏/你已經閱讀權限等? – Mikaveli 2011-05-24 09:53:20

回答

5

你不應該設置你的classpath 指向你的JDK的bin目錄 - 相反,它應該是PATH環境變量,它用於不同目的的類路徑。 (類路徑定義了一個包含編譯Java的jar和目錄列表。班級代碼; PATH變量定義了當shell在當前目錄中找不到時所需執行的程序執行的路徑列表 - 因此,如果您鍵入例如zip,它將查找PATH中定義的所有目錄,以及弄清楚,zip程序位於/usr/bin下) 其次,如果你想編譯從兩個目錄源,需要指定:

  • 所有地方的源路徑(包括home/pathToFolderA/srchome/pathToFolderB/gen-java
  • 路徑其中編譯的.class文件將生成
  • 在classpath中指定你可能在你的源使用任何庫文件

概括起來,它會是這樣的編譯:

javac -d /home/pathToFolderWithResultsOfCompilation -classpath /path/to/some.jar:/path/to/another.jar home/pathToFolderA/src/*.java home/pathToFolderB/gen-java/*.java 

並運行你編譯的程序:

java -classpath /path/to/some.jar:/path/to/another.jar:/home/pathToFolderWithResultsOfCompilation full.name.of.your.Java 
6

類路徑是用來尋找文件,而不是文件。 (也不是用來尋找javajavac二進制文件;那些在你的正常路徑中找到。)你需要指定文件明確編譯:如果你已經在/home/pathToFolderA/src那麼顯然

javac /home/pathToFolderA/src/fileName.java 

您可以使用fileName.java,因爲這被視爲相對於您當前的目錄。

+0

mmm不知道....如果我在pathToFolderA/src,我打電話給javac文件名.java ..它應該工作...並且它。這是當我在另一個文件夾中,它不工作...問題是爲什麼? – algorithmicCoder 2011-05-24 09:55:05

+1

@algorithmicCoder:因爲在其他文件夾中,'fileName.java'不存在。試試'cat fileName.java',我敢說也找不到這個文件。 **類路徑不用於查找源文件** – 2011-05-24 09:55:49

+0

你是絕對正確的..'fileName.java'在一個子目錄下....絕對愚蠢的錯誤..我要看Liv的答案如何正確指定我的路徑和類路徑...謝謝! – algorithmicCoder 2011-05-24 10:06:53

3

一些基本的Java應用程序在CentOS 5 Linux上工作,我有我的classpath設置爲指向home/pathToJava/bin包含javacjava

這是不對的。類路徑用於查找*.class文件,而不是操作系統特定的可執行文件。 JDK的bin目錄不屬於類路徑。請注意,類路徑也不適用於查找*.java源文件。

當您運行javac時,如果源文件不在當前目錄中,則需要指定源文件的路徑。

0

沒有目錄「gen-java」的列表和你輸入的確切命令,我的猜測是你試圖編譯一個不存在的文件。 Linux區分大小寫,所以也許這就是你的問題。或者該文件不存在。

1

確保您的文件名包含空格

如:

HelloWorld.java 

當您通過副本重命名文件過去,這將導致名稱和點之間的空間(:HelloWorld .java這是錯誤的),通常發生的錯誤。

,並確保你在

+0

我無法相信這一切都是由於文件名。我剛剛重新命名和繁榮!我的程序被編譯。謝謝。 – 2017-10-13 12:54:47

相關問題