无法运行包含依赖项的可执行 jar
如果我仍然不知道如何运行由 maven 生成的可执行 jar,我就会陷入困境并感到羞耻。
myapp-uberjar.jar 包含以下内容:
com/myapp/... (all my project packages and classes are here) META-INF/MANIFEST.MF dependency1.jar dependency2.jar ...
清单看起来也不错(为简洁起见,我在此处删除了一些依赖项):
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: rabdi Build-Jdk: 1.6.0_18 Main-Class: com.myapp.core.main.Boot Class-Path: spring-context-3.0.5.RELEASE.jar spring-context-support-3.0.5.RELEASE.jar spring-test-3.0.5.RELEASE.jar axis-1.4.jar axis-jaxrpc-1.4.jar axis -saaj-1.4.jar axis-wsdl4j-1.5.1.jar commons-discovery-0.2.jar xml-api s-1.0.b2.jar log4j-1.2.15.jar commons-pool-1.5.4.jar hamcrest-core-1.1.jar junit-de p-4.8.2.jar
现在,当我去运行我的 jar 时,出现以下错误:
D:\myapp\target>java -jar myapp-uberjar.jar Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger at com.myapp.core.main.Boot.(Boot.java:14) Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 1 more Could not find the main class: com.myapp.core.main.Boot. Program will exit.
为什么它不起作用?如何让它发挥作用。
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您
将我的程序与我的 jar 和库一起作为单个 zip 分发
,那么您必须构建一个类路径。如果您希望依赖项位于 jar 之外的库(强烈推荐),您必须使用程序集插件(或另一个执行此操作的插件)。
这是如何做到这一点的完整说明:
pom 构建元素:
程序集文件:
if your
distribute my program as single zip with my jar and libraries
, then you have to build a class path.if you want the dependencies to go the a libraries out side the jar (highly recommended) you'll have to use assembly plugin in (or another plugin that do that).
here is a full explanation how to do that:
pom build element:
the assembly file:
第一种可能性:Java 期望类路径上的所有这些 jar 都与可执行 jar 位于同一目录中。他们是吗?
First possibility: Java is expecting all those jars on the classpath to be in the same directory as your executable jar. Are they?