如何将 .java 或 .jar 文件转换为 Linux 可执行文件(没有 .jar 扩展名,这意味着它不是 .jar 文件)

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

我一直在寻找许多与此相关的类似帖子,但我仍然找不到答案。我想将 .java 程序转换为 Linux 可执行文件,不带 .jar 扩展名。我该怎么做?我正在尝试使用 Launch4j java 包装器、JWrapper、IzPack、制作 .sh、制作 .bat、使用 java -jar myFile.jar 等运行它,但它们都不起作用。有些程序比较复杂,调试起来比较困难。有没有直接的方法将 .java 文件或 .jar 文件转换为 Linux 可执行文件?

我需要将此程序作为 Linux 可执行文件整体传递到另一个将该程序作为参数的程序中。

java linux eclipse wrapper executable
5个回答
17
投票

假设您有一个名为 helloworld.jar 的可运行 jar

将下面的 Bash 脚本复制到名为 Stub.sh 的文件中

#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
    java="$JAVA_HOME/bin/java"
fi
java_args=-Xmx1g
exec "$java" $java_args -jar $MYSELF "$@"
exit 1 

将 jar 文件附加到保存的脚本中,并通过以下命令向生成的文件授予执行权限:

cat stub.sh helloworld.jar > helloworld.run && chmod +x helloworld.run 

仅此而已!

现在您只需在 shell 终端上输入 helloworld.run 即可执行该应用程序。

该脚本足够智能,可以将任何命令行参数透明地传递给 Java 应用程序。

鸣谢:保罗·迪·托马索

来源:https://coderwall.com/p/ssuaxa/how-to-make-a-jar-file-linux-executable


10
投票

经过数小时的搜索和尝试,我找到了一个解决方案,这正是我想要的。就是在linux中使用gcj命令。

它的工作方式类似于用于 C 的 gcc 和用于 C++ 的 g++,将 C 或 C++ 程序编译为可执行文件。

首先使用终端输入以下命令来安装 gcj:

sudo apt-get install gcj-jdk

之后,cd到.jar文件所在目录,假设.jar文件是myFile.jar,然后执行:

gcj myFile.jar -o newNameofTheFile --main=theMainClassNameofTheFile

编译.jar文件。它应该像可执行文件一样工作,只需在命令行中运行它,如下所示:

./newNameofTheFile

4
投票

将 jar 转换为 Linux 可执行文件的另一个简单技巧是在 jar 文件之前添加 shebang。

假设我们有一个 hello.jar 文件。

$ java -jar hello.jar
hello world!

您可以按照以下步骤创建可执行文件。

$ echo "#! /usr/bin/env java -jar" > hello
$ cat hello.jar >> hello
$ chmod +x hello

然后就可以直接执行hello文件了。

$ ./hello
hello world!

2
投票

您可以做的是制作一个很小的 C 程序,它将 exec 函数之一(请参阅 man 3 exec)调用到“java”二进制文件,传递“-jar”、“xxx.jar”作为参数,请参阅还在 C++ 中分叉一个新进程并执行 .jar 文件


0
投票

尝试 GraalVM 运行良好。
它允许为 Linux 构建本机二进制文件。
https://www.graalvm.org/

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