0

我制作了一个使用 Apache Commons io 和 lang3 库的程序。

它在 Eclipse 中运行良好,但我无法从 cmd 运行它并出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/la ng3/StringUtils 
    at mainActivity.main(mainActivity.java:37) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 1 more

如何让它从 cmd 运行(以便它在批处理文件中工作)

** 我比较新,我在 Win 8 上(我没有使用 Maven)**

4

7 回答 7

1

将必要的 jar 添加到您的类路径中。视窗:

> java -classpath yourjar.jar;lib\*.jar com.example.Main

Unix:

$ java -classpath yourjar.jar:lib/*.jar com.example.Main

唯一的区别是目录分隔符 ( // \) 和路径分隔符 ( :/ ;)。这假设您的 Apache jar(s) 位于lib项目的目录中。

于 2013-07-08T15:00:56.497 回答
1

当您从 eclipse 运行程序时,jar 文件由 Eclipse 添加到类路径中。但是,当您运行相同的表单命令提示符时,jar 文件需要明确位于类路径中。

有两种方法

  • 使用类路径运行您的程序,如下所示

java -classpath ".;c:\yourLib*" YourApp

yourLib包含 apache-commons jar 的文件夹在哪里。

  • CLASSPATH具有值的环境变量设置为由分隔的 jar 的绝对路径;

设置 CLASSPATH=D:\yourLib\

然后在没有类路径选项的情况下运行您的程序。运行时将从之前定义的环境变量中选择所需的类路径。

java YourApp

注意:我假设 Windows 平台。

于 2013-07-08T15:04:03.107 回答
0

你的类路径有问题。Eclipse 能够使用项目设置来解决类路径中的运行时库依赖关系。在java中添加commons-lang*.jarcommons-io*.jar文件。classpath您可以使用-cpor-classpath选项在命令行上设置类路径。

于 2013-07-08T14:56:46.670 回答
0

您需要在 CMD 窗口中手动添加每个 jar 文件。您可以使用 -cp 执行此操作

例如

java -cp /path/to/file;/path/to/anotherfile ...

另外,请记住使用正确的路径分隔符 -;适用于 windows 和:linux

于 2013-07-08T14:58:06.843 回答
0

你必须让你的 JAVA 知道你正在使用的库。Java 不知道在哪里寻找这些库。

于 2013-07-08T14:53:36.920 回答
0

使用 apache-coomos 库更新类路径。

于 2013-07-08T14:54:15.070 回答
-1

如果您使用的是 Maven,那么

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.3</version>
</dependency>
于 2013-07-08T15:06:15.330 回答