为什么从Eclipse导出的可运行JAR不起作用?

时间:2011-06-16 12:19:41

标签: java eclipse jar executable-jar

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

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

INFO: Loading XML bean definitions from class path resource [applicationContext-
framework.xml]
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOExc
eption parsing XML document from class path resource [applicationContext-framewo
rk.xml]; nested exception is java.io.FileNotFoundException: class path resource
[applicationContext-framework.xml] cannot be opened because it does not exist
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:349)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:310)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
        at org.springframework.context.support.AbstractXmlApplicationContext.loa
dBeanDefinitions(AbstractXmlApplicationContext.java:113)
        at org.springframework.context.support.AbstractXmlApplicationContext.loa
dBeanDefinitions(AbstractXmlApplicationContext.java:80)
        at org.springframework.context.support.AbstractRefreshableApplicationCon
text.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
        at org.springframework.context.support.AbstractApplicationContext.obtain
FreshBeanFactory(AbstractApplicationContext.java:422)
        at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:352)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<i
nit>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<i
nit>(ClassPathXmlApplicationContext.java:93)
        at com.horstmann.violet.UMLEditorApplication.getApplicationContext(UMLEd
itorApplication.java:111)
        at com.horstmann.violet.UMLEditorApplication.<init>(UMLEditorApplication
.java:94)
        at com.horstmann.violet.UMLEditorApplication.main(UMLEditorApplication.j
ava:84)
        ... 5 more
Caused by: java.io.FileNotFoundException: class path resource [applicationContex
t-framework.xml] cannot be opened because it does not exist
        at org.springframework.core.io.ClassPathResource.getInputStream(ClassPat
hResource.java:143)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:336)
        ... 20 more 

但该文件位于JAR根目录的resources/中。

我错过了什么或做错了什么?

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:1)

消息

Could not find the main class: violet-0.21.2-SVN.jar.  Program will exit.

表示在将jar文件打包在一起时,Manifest中的Main-Class: MyPackage.MyClass行错误。您需要使用main(String [] args)方法提供类的全名。

有关详细信息,请参阅http://download.oracle.com/javase/tutorial/deployment/jar/appman.html