簡體   English   中英

如何在Ubuntu上使用apache commons 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或具有依賴關系管理的其他構建系統。 GradleAnt + Ivy 。)如果你正在編寫一個使用第三方庫的Java應用程序,我強烈建議你學習並使用其中的一個。 (此外,大多數IDE可以使用Maven的配置文件,讓您在團隊中使用相同的構建設置,人們使用混合IDE或不使用IDE。)通常,如果您直接調用編譯器,則表明您沒有正確執行。

暫無
暫無

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

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