![](/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.