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
有誰看到我在做什麼錯了,還是我誤解的東西嗎?
好的 - 我還認爲jar會被「爆炸」,這樣jar中的每個資源都將作爲文件駐留在磁盤上。因此,圍繞「拆包」實際需要的清晰度會有所幫助。 作爲後續內容 - 如何將jar內的資源提取到文件系統中,以便它們可以直接讀取? –
我不確定你爲什麼要這麼做,但是你可以通過ClassLoader.getResourceAsStream()來訪問一個資源,然後將它寫出到一個文件中。你可以在沒有中間解包步驟的情況下做到這一點,儘管 –
不幸的是,我正在使用通過嵌套xml文檔遞歸的基礎結構 - 它假設所有包含的文檔都駐留在文件系統上。所以我沒有辦法改變這個事實。所以缺點是我需要從jar中取出這些文件並放在文件系統上。 –