我一直在寻找许多与此相关的类似帖子,但我仍然找不到答案。我想将 .java 程序转换为 Linux 可执行文件,不带 .jar 扩展名。我该怎么做?我正在尝试使用 Launch4j java 包装器、JWrapper、IzPack、制作 .sh、制作 .bat、使用 java -jar myFile.jar 等运行它,但它们都不起作用。有些程序比较复杂,调试起来比较困难。有没有直接的方法将 .java 文件或 .jar 文件转换为 Linux 可执行文件?
我需要将此程序作为 Linux 可执行文件整体传递到另一个将该程序作为参数的程序中。
假设您有一个名为 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
经过数小时的搜索和尝试,我找到了一个解决方案,这正是我想要的。就是在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
将 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!
您可以做的是制作一个很小的 C 程序,它将 exec 函数之一(请参阅 man 3 exec)调用到“java”二进制文件,传递“-jar”、“xxx.jar”作为参数,请参阅还在 C++ 中分叉一个新进程并执行 .jar 文件
尝试 GraalVM 运行良好。
它允许为 Linux 构建本机二进制文件。
https://www.graalvm.org/