2016-03-01 26 views
2

運行時,我從一個Maven項目創建爲這樣的jar文件:MissingResourceException異常:找不到包的基本名稱

java -jar basictool.jar 

我得到這個錯誤例外:

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(JarRsrcLoader.java:58) 
    Caused by: java.util.MissingResourceException: Can't find bundle for base name com/kit/version, locale en_US 
     at java.util.ResourceBundle.throwMissingResourceException(UnknownSource) 
     at java.util.ResourceBundle.getBundleImpl(Unknown Source) 
     at java.util.ResourceBundle.getBundle(Unknown Source) 
     at com.factories.FactoryImpl.<init>(FactoryImpl.java:80) 
     at com.parsers.BasicParser.<init>(BasicParser.java:32) 
     at com.parsers.FileParser.<init>(FileParser.java:76) 
     at com.tools.BasicTool.main(BasicTool.java:75) 
    ... 5 more 

我創建的使用maven jar創建嚮導創建jar文件: 右鍵單擊項目,選擇導出> Java> Runnable JAR文件 with options

啓動配置:BasicTool - 工作

出口目的地:C:\Users\Victor\Documents\basictool.jar

庫處理:包裝所需的庫到生成JAR

的version.properties文件保持在src/main/resources內,爲com/kit/version.properties

我已經檢查了version.properties文件的jar文件裏面發現運行:

jar tf basictool.jar > output.txt 

在那裏我找到version.properties文件這樣:

resources/com/kit/version.properties 

我嘗試加載資源是這樣的:

ResourceBundle.getBundle("com/kit/version"); 

我的機器和環境規格是其次: Windows 7,Spring版本:3.7.2

注意: 我發現了很多類似於我的問題,但是我找到的答案指向正確命名或放置在正確位置的屬性文件。從這些答案中我瞭解到version.properties很好,因爲默認情況下ResourceBundle.getBundle("com/kit/version")將首先查找version.class,然後查找version.properties。在最終查找基本名稱version.properties之前,它還會查找version_en_US.properties。 我似乎符合上述情況,因爲文件version.properties位於正確的位置並正確命名。我似乎也符合什麼其他答案提供:(

我也想指出,它發現資源就好,當我從春季運行該程序,這使我懷疑有關罐子的創作過程是問題的原因。

而且同樣重要的是要注意,屬性文件是在另一個Maven項目。

我希望我提供了足夠的/清晰的細節。任何幫助,將不勝感激,提前致謝!

回答

1

如果您的應用程序調用ResourceBundle.getBundle("com/kit/version");從與Ecl ipse一切正常。

但是,當您以您描述的方式(導出 - > java - > runnable jar)創建jar文件時,version.properties被放置在jar文件中resources/com/kit/version.properties。注意路徑前面的「資源」。
如果您在Eclipse以外與java -jar basictool.jar調用此罐,則無法找到version.properties,並且會拋出java.util.MissingResourceException

如果您更改路徑並致電ResourceBundle.getBundle("resources/com/kit/version");它不會在Eclipse中工作,但java -jar basictool.jar會執行此操作。

看來從Eclipse導出項目會導致問題。

我會建議創建jar文件,使用沒有Eclipse與maven-assembly-plugin
可以找到一個例子here。 此插件創建一個沒有resources目錄的jar文件,因此ResourceBundle.getBundle("com/kit/version");的調用在Eclipse之外的之間工作。

+0

謝謝!是的,這就是我最終搞清楚的事情......我忘了在這裏寫下答案。做得很好 :) –

相關問題