2011-09-18 43 views
0

我創建與Maven可執行的JAR,並增加了以下我的pom.xml下構建部分Java的罐子的JARname不解壓所有的資源文件

<build> 
..... 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
      </resource> 
      <resource> 
       <directory>src/main/snmp</directory> 
          <includes> 
           <include>**/*</include> 
          </includes> 
      </resource> 
     </resources> 
..... 
</build> 

我使用maven遮陽簾插件構建具有依賴關係的jar。

當我構建

java -jar jarName 

它不解壓所有的src/main/SNMP目錄下的文件後運行的命令,由於某種原因,它總是解壓一個文件(同一個文件)每次。但如果我這樣做

jar -xf jarName 

這將正確解壓一切。

任何其他的事情,我需要從一個可執行的jar使用資源?

回答

2

Java -jar不應該提取任何東西,它應該運行您在清單中聲明的​​任何主要方法。

你是什麼意思「使用來自可執行jar的資源」?如果你的意思是從應用程序中訪問類路徑中的資源,如果你做得對,它應該可以正常工作 - 但是沒有提取。

+0

當我說資源時,它必須讀取打包爲jar一部分的XML文件並打開該文件,該程序使用相對路徑。由於java -jar不會將這些文件解壓縮到當前目錄中,因此程序中提供的路徑不存在於文件系統中。 – Prasanna

+0

該文件應該作爲資源打開,而不是作爲文件系統文件打開。 –

+0

這是一個第三方依賴項。我必須給它一個目錄位置。你有任何想法來解決它? – Prasanna

1

命令java -jar jarName.jar嘗試執行類,在罐子裏,他的名字是在清單中Main-Class屬性給出找到。它不應該解壓該文件。另一方面,命令jar xf jarname.jar應該做到這一點。

如果使用java -jar運行該程序正在從檔案中解壓縮某些內容,那是因爲在檔案中找到的程序是專門設計的。

1

你絕對不想提取JAR來運行它。它應該是獨立的。把你的資源放在src/main/resources中,並且它們將被構建到根目錄下的jar中。然後使用Class.getResource()Class.getResourceAsStream()將其作爲類路徑資源。

編輯:根據您的意見,我想到的第一件事就是繼續前進,將文件打包到你的JAR,然後在運行時,使用File.createTempFile()將它們寫出來,以默認的臨時目錄,然後給那個目錄到第三方庫的使用。之後您可以使用File.deleteOnExit()進行清理。

+0

與戴夫相同的答覆。有一個第三方軟件從文件系統接收路徑,然後繼續讀取其中的所有配置文件,我無法控制它。 – Prasanna

+0

@Prasanna:更新了我的答案 –

相關問題