为什么我无法提取 Spring Boot 可执行 jar?

问题描述 投票:0回答:5

spring boot项目,构建为可执行jar,但我发现无法提取可执行jar,例如

jar xvf spring-boot-foo-0.0.1-SNAPSHOT.jar

没有任何输出。 但是当提取一个普通的jar时,就成功了

jar xvf mysql-connector-java-5.1.38.jar
created: META-INF/
inflated: META-INF/MANIFEST.MF
created: META-INF/services/
...

这是为什么?

jar spring-boot
5个回答
39
投票

您可以

less
您的jar文件,并会发现以下内容:

#!/bin/bash
#
#    .   ____          _            __ _ _
#   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
#  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
#   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
#    '  |____| .__|_| |_|_| |_\__, | / / / /
#   =========|_|==============|___/=/_/_/_/
#   :: Spring Boot Startup Script ::
#

也就是说,它是一个jar后面的bash文件,而不是一个普通的jar。

您可以使用以下方式提取此文件:

unzip spring-boot-foo-0.0.1-SNAPSHOT.jar

或者将 spring-boot-maven-plugin 的可执行标志设置为 false 来制作普通的 jar 文件。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>false</executable>
    </configuration>
</plugin>

17
投票

我通常在 Windows 上使用 7zip 来提取文件,但效果不佳。感谢@peace0phmind,我尝试用我的文本编辑器(notepad++)打开它,我看到内容是一个 shell 脚本,后面跟着二进制代码。

我刚刚删除了所有 bash 脚本行,保存了文件,现在我可以使用 7zip 打开它。


15
投票

使用 7zip 打开 Springboot 可执行 jar 时,您需要右键单击 .jar 文件并选择第二个 7zip 选项“打开存档...”,然后从其他格式中选择 zip 作为格式。 选择“作为存档打开”将不起作用。


0
投票

升级到 Spring boot 2.6.7 并使用 gradle bootJar 任务创建可执行 jar。 现在您可以提取 jar,即使它是可执行的。

不确定这是否是 Spring boot 2.6.x 中的错误

我尝试使用Spring boot版本2.6.7,Spring cloud版本2021.0.0,gradle 6.9.0

我无法限制使用任何标准 zip 存档工具提取该 jar。


0
投票

unzip就可以了~因为它不是tar归档文件。

© www.soinside.com 2019 - 2024. All rights reserved.