簡體   English   中英

在 linux 中添加類路徑

[英]adding classpath in linux

export CLASSPATH=.;../somejar.jar;../mysql-connector-java-5.1.6-bin.jar
java -Xmx500m folder.subfolder../dit1/some.xml
cd ..

上述將類路徑設置為linux中已經存在的類路徑的語句是否正確

我不喜歡設置 CLASSPATH。 CLASSPATH 是一個全局變量,因此它是邪惡的:

  • 如果你在一個腳本中修改它,突然一些 java 程序將停止工作。
  • 如果你把你運行的所有東西的庫放在那里,它就會變得雜亂無章。
  • 如果兩個不同的應用程序使用同一庫的不同版本,則會發生沖突。
  • 由於 CLASSPATH 中的庫不是共享的,因此沒有性能提升 - 只是它們的名稱是共享的。
  • 如果您將點 (.) 或任何其他相對路徑放在 CLASSPATH 中,這在每個地方都意味着不同的東西 - 這肯定會引起混亂。

因此,首選方法是為 jvm 的每次運行設置類路徑,例如:

java -Xmx500m -cp ".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar"    "folder.subfolder../dit1/some.xml

如果它變得很長,標准過程是將其包裝在 bash 或批處理腳本中以節省輸入。

除非您有充分的理由,否則始終建議不要破壞性地破壞現有的類路徑。

以下行保留現有的類路徑並添加到它上面。

export CLASSPATH="$CLASSPATH:foo.jar:../bar.jar"

在 Windows 和 Linux 中設置 Classpath 的重要區別是路徑分隔符是“;” Windows 中的(分號)和 Linux 中的“:”(冒號)。 此外, %PATH%用於表示 Windows 中現有路徑變量的值,而${PATH}在 Linux 中用於相同目的(在 bash 外殼中)。 這是在 Linux 中設置類路徑的方法:

export CLASSPATH=${CLASSPATH}:/new/path

但因此類路徑非常棘手,您可能想知道為什么即使設置了正確的類路徑,您的程序也無法運行。 注意事項:

  1. -cp選項覆蓋CLASSPATH環境變量。
  2. 清單文件中定義的類路徑會覆蓋-cpCLASSPATH環境變量。

參考: Classpath 如何在 Java 中工作

linux 下的路徑由冒號 ( : ) 分隔,而不是分號 ( ; ),因為劇院在他的示例中正確使用了它。 我相信 Java 尊重這個約定。

編輯

作為andy 建議的替代方法,您可以使用以下形式(在命令期間設置 CLASSPATH):

CLASSPATH=".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar" java -Xmx500m ...

哪個對你更方便。

對於linux用戶,總結和補充其他人在這里所說的,你應該知道以下幾點:

  1. 全局變量並不邪惡。 $CLASSPATH 特別是 Java 用於查看多個目錄以查找腳本所需的所有不同類(除非您使用 -cp 覆蓋明確告訴它)。

  2. 冒號 (":") 字符分隔不同的目錄。 只有一個 $CLASSPATH 並且其中包含所有目錄。 因此,當您運行“export CLASSPATH=....”時,您希望包含當前值“$CLASSPATH”,以便將 append 包含在其中。 例如:

     export CLASSPATH=. export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar

    在上面的第一行中,您只使用一個簡單的“點”來啟動 CLASSPATH,它是您當前工作目錄的路徑。 這樣,每當您運行 java 時,它都會在當前工作目錄(您所在的目錄)中查找類。 在上面的第二行中,$CLASSPATH 獲取您之前輸入的值 (.) 並將路徑附加到 mysql 驅動程序。 現在,java 將尋找驅動程序和您的課程。

  3.  echo $CLASSPATH

    非常方便,它返回的內容應該讀起來像一個冒號分隔的所有目錄列表,其中包含您想要的所有目錄 java 尋找運行腳本所需的內容。

  4. Tomcat 不使用 CLASSPATH。 在此處閱讀如何處理: https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html

暫無
暫無

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

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