运行jar文件,指出支持jar文件

时间:2012-09-25 12:26:25

标签: java jar executable-jar

我创建了一个新的jar文件。当我使用

运行jar时
java -jar UpdateAvailable.jar com.dao.mysql.UpdateAvailable

我遇到以下异常。

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/jettison/json/JSONException
Caused by: java.lang.ClassNotFoundException: org.codehaus.jettison.json.JSONException
    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)

但我复制了UpdateAvailable.jar内的所有支持罐子。现在我的要求是运行jar文件而没有指定支持jar,比如

java -jar UpdateAvailable.jar com.dao.mysql.UpdateAvailable

3 个答案:

答案 0 :(得分:0)

在使用JAR文件和ClassPath时,请记住以下几点: -

  • 为了使您的JVM查找类,您的类路径应设置为包含该类的目录。在这种情况下,你有JAR。
  • 因此,您需要提供路径,直到您的Jar文件名
  • 现在,由于您的Jar文件位于当前运行的Jar文件中,因此您无法将类路径设置为Jar内的文件夹,因此基本上您将无法为内部Jar文件设置类路径。 / LI>
  • 所以,显然JVM将无法在你的内部Jar中看到类..
  • 因此,请确保所需的JAR文件不在所有JAR文件中(我的意思是说 - 避免使用嵌套的JAR文件)..

答案 1 :(得分:0)

我不确定你是如何打包你的jar文件的,但听起来你需要One-Jar之类的东西来帮助你将文件和所有支持库打包到一个jar中。 One-Jar附带了它自己的类加载器,允许它在你的可执行jar文件中加载所有包含的jar。

配置非常简单易用。如果您使用的是Maven,则可以使用one-jar maven plugin来帮助您配置要包含的库。

您还可以使用其他类似的套餐代替One-Jar,例如JarJarProGuard。另请快速查看this SO question

答案 2 :(得分:0)

在可执行jar中无法读取jar内的任何支持jar文件。因此,将所有支持jar放在一个文件夹中,并将可执行jar放在同一目录中。并在“MANIFEST.MF”文件中添加“Class-Path”作为“支持jar文件与空格分开”。现在运行jar作为

java -jar UpdateAvailable.jar com.dao.mysql.UpdateAvailable