Classpath的设置,但仍然得到的NoClassDefFoundError(Classpath

2019-10-16 18:20发布

我想包一个非常简单的应用程序到广口瓶中,分发到用户。 我使用Eclipse靛蓝兼容Mac OS X 10.6.8的M2E插件。

我使用的Maven构建:包的目标将它打包作为一个罐子。 如果我双击罐子打开它,在GUI打开,似乎是工作,但是当我点击执行按钮,没有任何反应。 (该程序工作正常,如果我做的运行方式......在Eclipse)。

如果我尝试运行命令行的罐子,它甚至不会打开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. 为什么GUI打开时,我双击jar文件,而不是当我尝试在命令行中运行呢?

  2. 我猜classpath中需要定义到我使用的外部罐的绝对路径,我该如何设置,在POM文件?

谢谢!

Answer 1:

该清单说,所有的依赖性都坐在同一目录作为你的罐子。 如果这不是真的,没有去。

就个人而言,我会用appassembler插件才能有一个shell脚本来启动它的设备。 或树荫下的插件,使刚刚合并他们一个uberjar。 或了解OSX存根作出适当的OSX应用的.app。



文章来源: Classpath is set, but still getting NoClassDefFoundError