【问题标题】:Spring Boot requiresUnpack is not upacking at runtimeSpring Boot requiresUnpack 在运行时不打包
【发布时间】:2016-12-18 10:18:40
【问题描述】:

我正在通过 spring-boot maven 插件构建一个可执行的 jar。我需要解压其中一个依赖 jar,以便在运行时正确读取 xml 文件。我遵循了有关解压缩库的文档。我的插件配置如下:

        <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里面的内容,验证了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 中看到一个“spring-boot-libs”目录:

将每个库指定为带有 ,它们将在运行时在 $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

有没有人看到我做错了什么,或者我误解了什么?

【问题讨论】:

    标签: java spring spring-boot spring-boot-maven-plugin


    【解决方案1】:

    文档有点误导。解压后的目录如下:

    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 中解压缩的 jars 文件。

    我已打开 an issue 以更正文档。

    【讨论】:

    • 好的 - 我还认为 jar 会被“分解”,这样 jar 中的每个资源都会作为文件保存在磁盘上。因此,明确“拆包”实际上需要什么是有帮助的。作为后续 - 我如何将 jar 中的资源提取到文件系统中以便它们可以直接读取?
    • 我不确定您为什么要这样做,但是您可以通过 ClassLoader.getResourceAsStream() 访问资源,然后将其写入文件。不过,您可以在没有中间拆包步骤的情况下做到这一点
    • 不幸的是,我正在使用一种通过嵌套 xml 文档递归的基础架构——它假定所有包含的文档都驻留在文件系统上。所以我无法改变这个事实。所以简而言之,我需要从 jar 中提取这些文件并放在文件系统上。
    【解决方案2】:

    在 linux 上它只是 /tmp 文件夹。这个变量:$TMPDIR 对我不起作用

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 2021-04-27
      • 2017-05-28
      • 1970-01-01
      • 2014-02-20
      • 2020-05-20
      • 1970-01-01
      • 2014-07-03
      • 2017-08-02
      相关资源
      最近更新 更多