[英]Java: Setting Classpath
我有一個即將到期的項目,而且一切都進展順利,但是java類路徑正在變得越來越嚴重。 我將盡我所能盡可能清楚地解釋這種情況。
因此,我們使用Javacc編寫一種編程語言。 javacc文件編譯成幾個java文件。 Parser.java文件包括對其他生成的Java文件的引用和調用。 因此,生成后,我們將編譯Parser.java文件。 問題是我們遇到了很多錯誤,包括無法識別對其他java文件以及我們自己的文件的調用。 我們在教室討論板上詢問了我們的問題,然后教授回答“您需要在課程路徑中包含課程文件”。 好的,很好,問題是,我們該怎么做? 基本上,我們只有一個目錄,其中包含生成的Java文件和其他幫助文件。
那么,我們嘗試了什么?
我嘗試更改.bashrc(Ubuntu)文件以包括正確的類路徑,但這不起作用。 即
CLASSPATH=Home/project
(就像我在文件中使用的語法一樣)
我試過編譯執行
javac -cp . Parser.java
和
javac -cp "." Parser.java
都不起作用。
我試圖在文件目錄中編輯xml(我認為是xml).classpath文件。 仍然不起作用。
不知何故,我能夠在我擁有的目錄之一中編譯Parser.java(我們最終創建了多個目錄,其中包含相同的文件,這是徒勞的努力,以使某些工作正常進行),但是當我嘗試運行時
java -cp . Parser.java
要么
java Parser.java
它說找不到主程序,並拋出(我相信,在我的另一台計算機上)它的ClassNotFound或ClassNotDefined異常(類似的東西,即使它存在,它也無法在Parser文件中找到主程序)。
我們嘗試將軟件包減速和導入語句添加到我們的文件中,似乎沒有任何效果。
基本上:如何才能成功更改類路徑,以便可以在我的計算機上編譯並運行我的java文件(全部位於一個目錄中,而不是受jared影響)?
謝謝您的幫助。 我非常感謝。
我強烈建議您研究Ant 。 一個簡單的構建文件可以為您解決所有這些問題。
您不需要編輯.bashrc
或CLASSPATH
。
從命令行,您需要一起構建所有Java文件。 我不確定在生成javacc.jar
和Parser后JavaCC是否需要javacc.jar
。 但讓我們假設它確實對某些通用AST支持有效。
javacc.jar
位於~/javacc-5.0/lib/javacc.jar
root
| Parser.java
| Lexer.java
| Program.java
要編譯這些文件,我需要運行:
javac -cp ~/javacc-5.0/lib/javacc.jar Parser.java Lexer.java Program.java
那么我可以像這樣執行Program
,如果程序具有main
java -cp ~/javacc-5.0/lib/javacc.jar:. Program
root
| org
| myproject
| Parser.java
| Lexer.java
| Program.java
那么您需要像這樣執行javac:
javac -cp ~/javacc-5.0/lib/javacc.jar org/myproject/Parser.java org/myproject/Lexer.java org/myproject/Program.java
並執行
java -cp ~/javacc-5.0/lib/javacc.jar:. org.myproject.Program
root
| src
| org
| myproject
| Parser.java
| Lexer.java
| Program.java
那么您需要像這樣執行javac:
javac -cp ~/javacc-5.0/lib/javacc.jar -sourcepath src src/org/myproject/Parser.java src/org/myproject/Lexer.java src/org/myproject/Program.java
並執行
java -cp ~/javacc-5.0/lib/javacc.jar:src org.myproject.Program
javac
和java
之間有區別。 您嘗試以錯誤的方式使用它們。 javac
是一個生成* .class文件的編譯器(在您的情況下為Parser.class)。 然后必須由java
運行此* .class文件。
所以如果我有Parser.java文件
class Parser {
public static void main(String[] args) {
System.out.println("Hi");
}
}
我將轉到此文件所在的目錄並在shell中運行:
javac Parser.java
比運行編譯文件
java Parser
就是這樣。 請注意,java文件中類的名稱必須與文件名相同。
創建所有已編譯類的Jar文件。 請參考本教程 ,了解如何創建jar文件。
使用此命令開始編程
java -classpath pathToJarFile com.abc.MainClass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.