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

时间:2015-04-03 09:59:15

标签: java linux eclipse wrapper executable

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

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

4 个答案:

答案 0 :(得分:9)

让我们说你有一个名为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应用程序。

致谢:Paolo Di Tommaso

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

答案 1 :(得分:6)

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

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

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

sudo apt-get install gcj-jdk

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

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

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

./newNameofTheFile

答案 2 :(得分:2)

你可以做的是做一个小小的C程序,它将exec函数之一(参见man 3 exec)调用到“java”二进制文件,将“-jar”,“xxx.jar”作为参数传递,另见Forking a new process in C++ and executing a .jar file

答案 3 :(得分:0)

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

说我们有一个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!