gpt4 book ai didi

java - 使用 "java -jar executable.jar"执行 Jar 是可以的,但即使具有执行权限, "./executable.jar"也会返回 "Bad Magic Number"

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:04:28 24 4
gpt4 key购买 nike

我有一个用 maven 构建的小应用程序:

            <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>be.scripts.batchconverter.MainScript</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>create-executale-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>batchconverter</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>

我可以用“java -jar batchconverter”运行它,但是当我尝试用“chmod +x batchconverter.jar”然后“./batchconverter.jar”执行它时,我得到了这个一般错误:

invalid file (bad magic number): Exec format error

我的 JDK 是 oracle,“1.8.0_121”,我安装了 binfmt-support,我运行的是 ubuntu 16.04

这是 list :

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: jschoreels
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_121
Main-Class: be.scripts.batchconverter.MainScript

和ls结果(证明x权限)

-rwxrwxr-x 1 jschoreels jschoreels 4,9M Mär  7 11:40 batchconverter.jar

有什么办法可以确定原因吗?

最佳答案

大多数文件格式以固定的字节组合或“魔数(Magic Number)”开头。
例如,Java 类文件以字节或“魔数(Magic Number)”0xcafebabe 开头。

您的系统需要能够识别文件类型并知道用什么来执行文件。
您的系统不知道如何直接执行 jar 存档,并且 unix 系统通常不会配置为执行此操作。

在 ubuntu 上它是 possible to enable this with the binfmt-support package.

另一个解决方案是嵌入一个开始 script into the head of the archive file , 但它有点 hacky。
基本上操作系统将文件识别为 shell 脚本,然后脚本本身调用 java 命令。

例如 spring-boot plugin is able to make use of this technique , 他们嵌入了一个允许直接执行 jar 文件的脚本,以及作为 init 启停脚本工作。

关于java - 使用 "java -jar executable.jar"执行 Jar 是可以的,但即使具有执行权限, "./executable.jar"也会返回 "Bad Magic Number",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42646308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com