2014-09-12 63 views
-2

我正在制作一个项目,将.wav文件修改为.flac文件,我使用类http://javaflacencoder.sourceforge.net/javadoc/index.html。我在IDE eclipse中的项目运行良好。但是,当我将它导出到.jar并在Linux上使用命令行运行它时。有错误:为什么jar不能用命令行工作?

Exception in thread "main" java.lang.NoClassDefFoundError: javaFlacEncoder/FLAC_FileEncoder 
    at speech.Speech.main(Speech.java:44) 
Caused by: java.lang.ClassNotFoundException: javaFlacEncoder.FLAC_FileEncoder 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 1 more 

没有主意,我不明白为什么。任何人都有同样的问题吗?你能告诉我如何解决它吗?谢谢,

+0

你在终端上输入的命令是什么?你的项目是否引用任何外部库?尝试添加你的库的-cp PATH。 – AndreDuarte 2014-09-12 13:08:19

+0

构建jar时是否导出了外部库? – ortis 2014-09-12 13:08:58

+0

你提供了正确的类路径来执行jar吗? – SimY4 2014-09-12 13:09:55

回答

0

您应该添加一个类路径条目让Java知道你的图书馆员。

通常情况下,你必须做到:

# generate the classpath entry 
declare classpath=$(for jar in lib/*.jar; do echo ":$jar"; done) 
# remove the first character (':'). 
classpath="${classpath:1}" 
java -cp "${classpath}" -jar yourjar.jar 

或者:

# the same code that generate classpath 
export CLASSPATH="${classpath}" 
java -jar yourjar.jar 

此外,在罐子,you can list them the Class-Path entry的清单。

+0

感谢您的指示链接。它现在可以工作;) – 2014-09-12 13:44:19

+0

然后你可以接受答案:) – NoDataFound 2014-09-12 15:11:53

0

Eclipse负责设置用于执行Java程序的类路径;您可能无法在命令行上复制此内容。有几个选项:

  1. 如果开始java <main_class_name>,然后添加-cp参数列出所有依赖的JAR文件;

  2. 如果与java -jar <jar_name>开始,然后确保JAR的清单(MANIFEST.MF)包括Class-Path项,其中列出了它依赖于其他JAR;

  3. 创建一个包含所有必需类的“uberjar”。 Maven的阴影插件可以为你做到这一点。

相关问题