![](/img/trans.png)
[英]How to use correctly ZipfDistribution from Apache commons math library in Java?
[英]How to use the apache commons java library on Ubuntu?
我是一個Java初學者,並試圖弄清楚如何使用apache commons lib。
這是一個源文件Randstr.java
:
import org.apache.commons.lang3.RandomStringUtils;
class Randstr {
public static void main(String[] args) {
String s = RandomStringUtils.random(12);
System.out.println(s);
}
}
我在/ usr / share / java /中有commons-lang3-3.1.jar
文件,並在當前目錄中創建了一個符號鏈接。 然后我編譯它像這樣: javac -cp commons-lang3-3.1.jar Randstr.java
,complilation很好,但是當我執行java Randstr
,我收到以下錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/RandomStringUtils
at Randstr.main(Randstr.java:5)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.RandomStringUtils
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
如果我沒有在類路徑中指定jar文件,它甚至不會編譯:
javac -cp . Randstr.java
# Randstr.java:1: error: package org.apache.commons.lang3 does not exist
# import org.apache.commons.lang3.RandomStringUtils;
# ^
# Randstr.java:5: error: cannot find symbol
# String s = RandomStringUtils.random(12);
# ^
# symbol: variable RandomStringUtils
# location: class Randstr
# 2 errors
javac -cp /usr/share/java/ Randstr.java
# Randstr.java:1: error: package org.apache.commons.lang3 does not exist
# import org.apache.commons.lang3.RandomStringUtils;
# ^
# Randstr.java:5: error: cannot find symbol
# String s = RandomStringUtils.random(12);
# ^
# symbol: variable RandomStringUtils
# location: class Randstr
# 2 errors
從閱讀stackoverflow上的其他問題,我看到這可以通過使用IDE來解決,但我現在更喜歡一個簡單的編輯器。
如果你可以編譯它
javac -cp commons-lang3-3.1.jar Randstr.java
然后你可以運行它
java -cp commons-lang3-3.1.jar:. Randstr
JAR文件必須位於類路徑中。
編輯您的個人資料文件 vim~ / .bashrc
在您的個人資料文件中添加以下行:
export CLASSPATH=/usr/share/java/commons-lang3-3.1.jar:.
注銷並重新登錄。或者在已打開的窗口中找到您的個人資料文件。 您始終可以將類路徑添加到您調用的每個java和javac命令中,但這會變得很麻煩。 使用CLASSPATH環境變量,您不必再在命令行上添加它。 請注意,如果您使用的是NetBeans或Eclipse等IDE,則可能還需要將庫添加到IDE中項目的庫中。
顯然, /usr/share/java/
的內容不會自動添加到類路徑中 - 它只是APT包放置Java庫的常用位置。 開發人員可以正確引用它們。
Java安裝的ext/
子目錄中的JAR會自動添加到類路徑中。 但是, 不要將自己的JAR放在那里。 這是一種可怕的做法,因為它與“在現實世界中”部署Java應用程序的方式不相符。
正確的方法是在編譯和運行應用程序時顯式使用-cp
參數。 Java不會將庫代碼編譯到.class
文件中, .class
文件只引用其他類的名稱,然后在應用程序運行時根據需要從類路徑加載。 -cp
參數僅包含.jar
文件或包含.class
文件的目錄。 您還可以在該參數的值中使用通配符。 有關對類路徑進行爭論的更多信息,請查看有關設置類路徑的工具文檔 。
您使用自動為其設置的構建工具,如IDE或Maven或具有依賴關系管理的其他構建系統。 ( Gradle或Ant + Ivy 。)如果你正在編寫一個使用第三方庫的Java應用程序,我強烈建議你學習並使用其中的一個。 (此外,大多數IDE可以使用Maven的配置文件,讓您在團隊中使用相同的構建設置,人們使用混合IDE或不使用IDE。)通常,如果您直接調用編譯器,則表明您沒有正確執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.