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/
...
这是为什么?
您可以
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>
我通常在 Windows 上使用 7zip 来提取文件,但效果不佳。感谢@peace0phmind,我尝试用我的文本编辑器(notepad++)打开它,我看到内容是一个 shell 脚本,后面跟着二进制代码。
我刚刚删除了所有 bash 脚本行,保存了文件,现在我可以使用 7zip 打开它。
使用 7zip 打开 Springboot 可执行 jar 时,您需要右键单击 .jar 文件并选择第二个 7zip 选项“打开存档...”,然后从其他格式中选择 zip 作为格式。 选择“作为存档打开”将不起作用。
升级到 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。
unzip就可以了~因为它不是tar归档文件。