2011-06-16 112 views
3

我有一個可以在Eclipse中正常運行的項目。 但是,當我將它導出到一個可運行的JAR中並且依賴包裝在它中時它將不會運行。 錯誤,從控制檯運行JAR時是:爲什麼從Eclipse導出的可運行JAR不起作用?

EDIT(didnt之前-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 

但該文件是在resources/從JAR-根。

我在想什麼或做錯了什麼?

+0

@Cobra_Fast請再說一說。根據您的導出配置製作截圖(嚮導)並告訴我們您的項目結構。你有例外嗎? – Tim 2011-06-16 12:22:15

+0

正如我所說,它不會拋出任何錯誤。 JAR生成和JAR執行工作得很好,不同之處在於JAR立即退出,而從eclipse運行的不是。我使用相同的配置爲JAR運行從eclipse。 – 2011-06-16 12:25:13

+2

@Cobra_Fast:嘗試從命令提示符運行jar。也許你可以看到一些有點錯誤。 – 2011-06-16 12:26:49

回答

6

嘗試單擊「將所需的庫打包到生成的JAR中」選項。

JAR文件是一個常規的壓縮存檔。確保MANIFEST.MF文件中的所有必需庫存在於生成的文件中。

5

嘗試從命令行運行JAR - 它很可能會顯示一條有用的錯誤消息。

可能有一些依賴關係,eclipse並不知道或沒有在其中正確配置,因此從JAR中缺少。

一般來說,依靠IDE功能來生成可交付成果並不是一個好主意 - 它依賴於太多的隱藏因素,不能自動構建服務器。任何超出實驗/玩具階段的項目都應該通過Ant或Maven進行自動構建。

+0

+1最後一段。大多數時候應該使用類似ANT的機制來構建項目,而不是依賴於IDE。 – 2011-06-16 12:32:49

1

消息

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

指示包裝在一起時的jar文件,你已經得到了Main-Class: MyPackage.MyClass線錯誤的清單。您需要使用main(String [] args)方法給出該類的全名。

查看http://download.oracle.com/javase/tutorial/deployment/jar/appman.html瞭解詳情。

相關問題