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中取出这些文件并放在文件系统上。 –