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

相关问题