为什么jar不能使用命令行?

时间:2014-09-12 13:07:40

标签: java linux eclipse

我正在创建一个将.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

没有想法,我无法理解为什么。任何人都有同样的问题吗?你能告诉我怎么解决吗?谢谢,

2 个答案:

答案 0 :(得分:0)

Eclipse负责为执行Java程序设置类路径;你可能无法在命令行上复制它。有几种选择:

  1. 如果以java <main_class_name>开头,则添加列出所有依赖项JAR的-cp参数;

  2. 如果以java -jar <jar_name>开头,请确保JAR的清单(MANIFEST.MF)包含Class-Path条目,该条目列出了它依赖的其他JAR;

  3. 创建一个包含所有必要类的“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