2015-04-01 154 views
0

所以,我有以下文件夾結構:如何將外部文件夾添加到類路徑中?

  • 項目
    • LIB (運行此文件夾中的jar)
    • 屬性(屬性文件加載是此文件夾中)

我想通過X.class.getClassLoader()。getResource(「properties/fileName」)加載屬性文件。此方法在eclipse中工作,但是當我使用maven構建jar時,它無法找到該文件,從而導致文件未找到異常。

我懷疑該文件夾不在類路徑中,因爲如果我運行getClassLoader()。getResources(「」)屬性文件夾永遠不會顯示。我在以前的問題上嘗試了所有關於stackoverflow的建議,但目前還沒有任何建議。

我也試着運行java -cp和-classpath,但仍然失敗。

回答

0

使用Maven時,默認情況下,文件如*.properties和任何其他不可編譯的文件必須位於src/main/resources文件夾中。

此外,我建議您使用Thread.currentThread().getContextClassLoader()來獲取正確的類加載器,以加載資源。

無論如何,如果你想擁有在類路徑的自定義文件夾,我建議你添加爲資源,在pom.xml,就像這樣:

<project> 
    ... 
    <build> 
     ... 
     <resources> 
      <resource> 
       <!-- The folder you want to be a resource (from project root folder), like: project/properties --> 
       <directory>properties</directory> 
       <!-- Filtering if Maven should post-process text files to find and replace ${key} params: in most cases, leave it false --> 
       <filtering>false</filtering> 
      </resource> 
     </resources> 
    </build> 
</project> 
+0

當我嘗試你的建議,getClassLoader()。 getResources(「」)找到一個URL,但是當它傳遞給FileInputStream構造函數時,我得到一個文件未找到的異常。我想我可以使用Thread.currentThread()。getContextClassLoader(),但我堅持遺留代碼... – StickStack 2015-04-01 17:52:23

+0

我認爲你的類加載器沒有看到該文件。沒有辦法改變類加載器嗎?它可以爲你解決這個問題...無論如何,我會花一些時間並檢查解決方法。 – 2015-04-01 20:36:20

+1

類加載器從來沒有看到該文件,因爲它不在類路徑中,不管我做什麼。我希望我能改變類加載器,但我不能。我在不再使用類加載器的地方做了一個工作,因此它現在已經「固定」了。感謝您的幫助,不需要浪費您的時間。 – StickStack 2015-04-01 20:49:11

相關問題