Java 为什么';难道不是从Eclipse工作中导出的可运行JAR吗?

Java 为什么';难道不是从Eclipse工作中导出的可运行JAR吗?,java,eclipse,jar,executable-jar,Java,Eclipse,Jar,Executable Jar,我有一个在Eclipse中运行良好的项目。 但当我将它导出到一个可运行的JAR中,并将依赖项打包到其中时,它将不会运行。 从控制台运行JAR时出现的错误是: 编辑(以前没有使用-jar运行它): INFO:从类路径资源[applicationContext]加载XML bean定义- framework.xml] 线程“main”java.lang.reflect.InvocationTargetException中出现异常 在sun.reflect.NativeMethodAccessorIm

我有一个在Eclipse中运行良好的项目。 但当我将它导出到一个可运行的JAR中,并将依赖项打包到其中时,它将不会运行。 从控制台运行JAR时出现的错误是:

编辑(以前没有使用-jar运行它):

INFO:从类路径资源[applicationContext]加载XML bean定义-
framework.xml]
线程“main”java.lang.reflect.InvocationTargetException中出现异常
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
原因:org.springframework.beans.factory.BeanDefinitionStoreException:IOExc
从类路径资源[applicationContext framewo]解析XML文档的eption
xml];嵌套异常为java.io.FileNotFoundException:类路径资源
无法打开[applicationContext framework.xml],因为它不存在
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:349)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:310)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r、 loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r、 loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r、 loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r、 loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
位于org.springframework.context.support.AbstractXmlApplicationContext.loa
dBeanDefinitions(AbstractXmlApplicationContext.java:113)
位于org.springframework.context.support.AbstractXmlApplicationContext.loa
dBeanDefinitions(AbstractXmlApplicationContext.java:80)
位于org.springframework.context.support.AbstractRefreshableApplicationon
refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
在org.springframework.context.support.AbstractApplicationContext.get上
FreshBeanFactory(AbstractApplicationContext.java:422)
位于org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:352)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:93)
在com.horstmann.violet.UMLEditorApplication.getApplicationContext(UMLEd)上
(java:111)
在com.horstmann.violet.UMLEditorApplication.(UMLEditorApplication
.java:94)
在com.horstmann.violet.UMLEditorApplication.main(UMLEditorApplication.j
艾娃:84)
... 还有5个
原因:java.io.FileNotFoundException:类路径资源[applicationContex]
无法打开t-framework.xml],因为它不存在
位于org.springframework.core.io.ClassPathResource.getInputStream(ClassPat
hResource.java:143)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:336)
... 20多
但是该文件位于JAR根目录的
resources/


我遗漏了什么或做错了什么?

尝试从命令行运行JAR-它很可能会显示一条有用的错误消息

可能有一些eclipse不知道的依赖项,或者在其中没有正确配置,因此JAR中缺少这些依赖项


一般来说,依靠IDE功能来生成可交付成果不是一个好主意——它依赖于太多的隐藏因素,并且不能为构建服务器实现自动化。任何超出实验/玩具阶段的项目都应该通过Ant或Maven进行自动构建。

尝试单击“将所需库打包到生成的JAR”选项

JAR文件是一个常规的压缩归档文件。确保MANIFEST.MF文件中所有必需的库都存在于生成的文件中。

消息

Could not find the main class: violet-0.21.2-SVN.jar.  Program will exit.
表示在打包jar文件时,清单中的
Main Class:MyPackage.MyClass
行出现错误。您需要使用main(String[]args)方法提供类的全名


有关详细信息,请参阅。

@Cobra\u Fast请告诉我们更多信息。根据导出配置(向导)制作屏幕截图,并告诉我们您的项目结构。你有例外吗?正如我说的,它不会抛出任何错误。JAR生成和JAR执行工作得很好,区别在于JAR会立即退出,而从eclipse运行不会。我对JAR使用的配置与从eclipse运行时相同。@Cobra\u Fast:尝试从命令提示符运行JAR。可能您在这方面看到了一些错误。显然,它试图将jar文件名转换为jar中的路径,但未能加载该类。@Cobra_Fast:为什么需要在代码中指定jar文件名?+1作为最后一段。大多数情况下,应该使用类似ANT的机制来构建项目,而不是依赖IDE。
Could not find the main class: violet-0.21.2-SVN.jar.  Program will exit.