无法运行包含依赖项的可执行 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.
为什么它不起作用?如何让它发挥作用。
谢谢!
I'm stuck with this and shame on me if I still don't know how to run an executable jar generated by maven.
The myapp-uberjar.jar contains the following:
com/myapp/... (all my project packages and classes are here) META-INF/MANIFEST.MF dependency1.jar dependency2.jar ...
The manifest seems ok also (I deleted some dependencies here for brevity):
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
Now when I go to run my jar I've the following errors:
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.
Why it doesn't work? How to get it working.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 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?