有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java类路径已设置,但仍然得到NoClassDefFoundError

我正在尝试将一个非常简单的应用程序打包到一个jar中,分发给用户。我正在Mac OS X 10.6.8上使用带有m2e插件的Eclipse Indigo

我使用Maven build:package目标将其打包为一个jar。如果我双击jar打开它,GUI就会打开,并且看起来正在工作,但是当我单击execute按钮时,什么也没有发生。(如果我在Eclipse中以…的身份运行,该程序运行良好)

如果我试图从命令行运行jar,它甚至不会打开GUI,我会得到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: str-profile-comparison-0/0/1-SNAPSHOT    /jar
Caused by: java.lang.ClassNotFoundException: str-profile-comparison-0.0.1-SNAPSHOT.jar
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:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

我从jar中提取了清单文件,以检查类路径,它如下所示:

Manifest-Version: 1.0
Built-By: username
Build-Jdk: 1.6.0_24
Class-Path: poi-3.7.jar poi-ooxml-3.7.jar poi-examples-3.7.jar xmlbean
s-2.3.0.jar stax-api-1.0.1.jar dom4j-1.6.1.jar xml-apis-1.0.b2.jar po
i-ooxml-schemas-3.7.jar geronimo-stax-api_1.0_spec-1.0.jar poi-scratc
hpad-3.7.jar junit-4.8.2.jar
Created-By: Apache Maven
Main-Class: com.{companyname}.strprofilecomparison.logic.StrComparatorGUI
key: value
url:
mode: development
Archiver-Version: Plexus Archiver

关于这里发生的事情,我有几个问题:

  1. 为什么当我双击jar文件时GUI会打开,而当我试图在命令行上运行它时却不会打开

  2. 我猜类路径需要定义我正在使用的外部jar的绝对路径,如何在POM文件中设置它

谢谢


共 (1) 个答案

  1. # 1 楼答案

    该清单表明,所有依赖项都与jar位于同一目录中。如果那不是真的,那就不干了

    就我个人而言,我会使用appassembler插件来制作一个有外壳脚本的设备来启动它。或者使用shade插件制作一个uberjar,将它们合并在一起。或者学习OSX存根来制作一个合适的OSX。应用程序