2016-08-11 409 views
1

我正在通過spring-boot maven插件構建可執行jar。我需要解壓其中一個依賴jar,以便在運行時可以正確讀取xml文件。我遵循有關拆包libs的文檔。我的插件配置如下:Spring Boot requiresUnpack在運行時不會彈出

 <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <requiresUnpack> 
        <dependency> 
         <groupId>com.deep6analytics.pipeline</groupId> 
         <artifactId>pipeline-services-ctakes</artifactId> 
        </dependency> 
       </requiresUnpack> 
      </configuration> 
     </plugin> 
    </plugins> 

我查了罐子的內容,並證實拆包信息被編碼在jar:

$ zipnote target/pipeline-apps-annotation-server-1.0-SNAPSHOT.jar | grep -C 1 UNPACK 
@ BOOT-INF/lib/pipeline-services-ctakes-1.0-SNAPSHOT.jar 
UNPACK:1e6eda0ca9f1b740c4aba6058cac74a5084f1706 
@ (comment above this line) 

根據該文件,在運行時,我的預期看我的$ TMPDIR中的「彈簧引導庫」目錄:

指定每個庫作爲<依賴>有<的groupId >和<artifactId>,它們將在運行時在$ TMPDIR/spring-boot-libs中解壓縮。

但是,當我運行該應用程序時,我檢查$ TMPDIR並沒有看到解壓目錄。因此,我的應用程序無法啓動:

ls -la $TMPDIR 

drwxr-xr-x 3 staff  102 Aug 10 23:40 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-96fe7360-b23b-4caa-a2ce-75aa0300a417 
drwxr-xr-x 3 staff  102 Aug 10 23:27 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-a06a2373-0694-42e9-bee1-29191b3b764a 
drwxr-xr-x 4 staff  136 Aug 10 20:54 sp_update 
drwx------ 2 staff  68 Aug 10 11:30 ssh-azEJDYkZH6ho 
drwxr-xr-x 3 staff  102 Aug 10 15:05 tomcat.104726406473930572.8085 
drwxr-xr-x 3 staff  102 Aug 10 23:38 tomcat.1527552147767629466.8080 
drwxr-xr-x 3 staff  102 Aug 10 23:13 tomcat.1546871599966723864.8080 

有誰看到我在做什麼錯了,還是我誤解的東西嗎?

回答

2

該文檔有點誤導。解壓後的目錄是有:

drwxr-xr-x 3 staff  102 Aug 10 23:40 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-96fe7360-b23b-4caa-a2ce-75aa0300a417 
drwxr-xr-x 3 staff  102 Aug 10 23:27 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-a06a2373-0694-42e9-bee1-29191b3b764a 

這些目錄中應該包含您已標記爲需要從你的可執行的JAR文件解壓縮的罐子文件。

我打開了an issue以更正文檔。

+1

好的 - 我還認爲jar會被「爆炸」,這樣jar中的每個資源都將作爲文件駐留在磁盤上。因此,圍繞「拆包」實際需要的清晰度會有所幫助。 作爲後續內容 - 如何將jar內的資源提取到文件系統中,以便它們可以直接讀取? –

+1

我不確定你爲什麼要這麼做,但是你可以通過ClassLoader.getResourceAsStream()來訪問一個資源,然後將它寫出到一個文件中。你可以在沒有中間解包步驟的情況下做到這一點,儘管 –

+1

不幸的是,我正在使用通過嵌套xml文檔遞歸的基礎結構 - 它假設所有包含的文檔都駐留在文件系統上。所以我沒有辦法改變這個事實。所以缺點是我需要從jar中取出這些文件並放在文件系統上。 –

相關問題