我正在创建一个将.wav文件修改为.flac文件的项目,我使用了类http://javaflacencoder.sourceforge.net/javadoc/index.html。我在IDE eclipse中的项目效果很好。但是当我将它导出到.jar并在linux上使用命令行运行它时。有错误:
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 :(得分:0)
Eclipse负责为执行Java程序设置类路径;你可能无法在命令行上复制它。有几种选择:
如果以java <main_class_name>
开头,则添加列出所有依赖项JAR的-cp
参数;
如果以java -jar <jar_name>
开头,请确保JAR的清单(MANIFEST.MF)包含Class-Path
条目,该条目列出了它依赖的其他JAR;
创建一个包含所有必要类的“uberjar”。 Maven的 shade 插件可以帮到你。
答案 1 :(得分: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
另外,在jar的清单中,you can list them the Class-Path
entry。