Java 运行可执行jar时出现问题:ClassNotFoundException即将出现

Java 运行可执行jar时出现问题:ClassNotFoundException即将出现,java,spring,maven,jar,packaging,Java,Spring,Maven,Jar,Packaging,我使用Maven安装创建了一个jar,当我使用命令java-jar MyJar.jar运行jar时,它给了我一个异常。下面是堆栈跟踪 Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext Caused by: java.lang.ClassNotFoundException: org.springframework.context.Appl

我使用Maven安装创建了一个jar,当我使用命令
java-jar MyJar.jar
运行jar时,它给了我一个异常。下面是堆栈跟踪

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
        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)
我的pom.xml中有所有依赖项,并且我成功地将主类作为独立应用程序运行

然后我提取了jar的内容,我惊讶地发现其中没有依赖jar,尽管清单文件在类路径中有所有jar。 下面是生成的清单文件:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Anand Jain
Build-Jdk: 1.6.0_38
Main-Class: com.hcentive.simulator.cms.beq.response.util.Test
Class-Path: spring-jdbc-3.0.6.RELEASE.jar spring-beans-3.0.6.RELEASE.j
 ar spring-core-3.0.6.RELEASE.jar spring-tx-3.0.6.RELEASE.jar spring-c
 ontext-3.0.6.RELEASE.jar spring-expression-3.0.6.RELEASE.jar spring-a
 sm-3.0.6.RELEASE.jar cglib-nodep-2.2.jar hibernate-jpa-2.0-api-1.0.1.
 Final.jar spring-aop-3.0.6.RELEASE.jar aopalliance-1.0.jar spring-bat
 ch-core-2.1.7.RELEASE.jar xstream-1.3.jar xpp3_min-1.1.4c.jar jettiso
 n-1.1.jar spring-batch-infrastructure-2.1.7.RELEASE.jar commons-beanu
 tils-1.8.3.jar commons-logging-1.1.1.jar hibernate-core-3.5.1-Final.j
 ar antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar xml-ap
 is-1.0.b2.jar jta-1.1.jar slf4j-api-1.5.8.jar commons-dbcp-1.2.2.jar 
 commons-pool-1.3.jar commons-io-1.3.2.jar commons-lang-2.5.jar hsqldb
 -1.8.0.7.jar aspectjrt-1.6.8.jar aspectjweaver-1.6.8.jar log4j-1.2.14
 .jar

有人能帮忙吗?

java-classpath jar1;jar2;jar3;jar4;xml1;xml2;。。。。;jar ExceutableJar.jar

我相信它可能有很多jar文件

我建议您将整个命令复制到记事本文件中,并在Unix中保存为批处理(.bat)或shell脚本(.sh)


因此,您可以使用一个文件轻松地运行jar,而不是重复使用maven构建包含所有依赖项的jar命令,您可以添加


maven汇编插件
com.example.MyMain
带有依赖项的jar
使用依赖项创建jar
包裹
单一的
org.apache.maven.plugins
maven编译器插件
1.6
1.6

您还应该确保为每个依赖项正确设置了作用域。

是否在Jar的清单文件中包含
类路径
元素?是的,包括我在上面提到的“我提取了Jar的内容,我惊讶地发现其中没有依赖项Jar”否。对于Java应用程序部署,由于各种原因,我们通常不使用您所指的“jar-in-jar”技术。@Andrew-粘贴了清单file@Anand确保依赖Jar与可执行Jar一起部署。根据舱单,它们应该与可执行jar驻留在同一个上下文中,这不是一个更好的解决方案,因为我需要将此jar移交给QA团队进行测试。它们不应该为任何外部jar而烦恼。是否有任何方法可以自动执行此操作,而无需在命令路径上显式地给出它??
-cp
在执行
-jar
时被忽略明确规定。使用
-jar
JVM依赖于主jar中的清单来指定类路径。-jar被忽略??胡说八道??请解释我是否应该以Maven安装的方式运行它??当我以Maven安装的方式运行它时..它生成了两个jar--一个普通jar和一个具有依赖性的jar..我只需要一个jar..@JayTee我觉得Java无法从另一个jar中加载jar依赖性?最近有没有改变(因为如果有,我会很兴奋)你只需要一个标记为“带有依赖性”的,它仍然会生成没有依赖性的普通jar,你也可以忽略它。您应该能够使用java-jar-foo-with-dependancess.jar等@MadProgrammer,我不知道这是否是一种改变,但它现在肯定可以工作了。