簡體   English   中英

Java:設置類路徑

[英]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 一個簡單的構建文件可以為您解決所有這些問題。

您不需要編輯.bashrcCLASSPATH

從命令行,您需要一起構建所有Java文件。 我不確定在生成javacc.jar和Parser后JavaCC是否需要javacc.jar 但讓我們假設它確實對某些通用AST支持有效。

javacc.jar位於~/javacc-5.0/lib/javacc.jar

方案1:目錄結構簡單,所有Java文件都位於根目錄中,沒有包。

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

場景2:中等目錄結構,代碼在根目錄下,但帶有軟件包。

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

方案3:復雜的目錄結構,帶有包的特定源目錄。

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

javacjava之間有區別。 您嘗試以錯誤的方式使用它們。 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文件中類的名稱必須與文件名相同。

  1. 創建所有已編譯類的Jar文件。 請參考本教程 ,了解如何創建jar文件。

  2. 使用此命令開始編程

      java -classpath pathToJarFile com.abc.MainClass 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM