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

我一直在寻找许多类似的post,但我仍然无法find我的答案。 我想将一个.java程序转换成一个Linux可执行文件,没有.jar扩展名。 我该怎么做? 我正在尝试使用Launch4j java包装,JWrapper,IzPack,制作一个.sh,制作一个.bat,使用java -jar myFile.jar等来运行它,但是它们都没有工作。 有些程序很复杂,很难debugging。 有没有简单的方法将.java文件或.jar文件转换为Linux可执行文件?

我需要将这个程序作为一个Linux可执行程序整体传递给另一个以此程序为参数的程序。

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

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

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

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

sudo apt-get install gcj-jdk 

之后,进入.jar文件所在的目录,比如说.jar文件是myFile.jar,然后执行:

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

编译.jar文件。 而且它应该像一个可执行文件一样在命令行中运行,如下所示:

 ./newNameofTheFile 

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

假设您有一个名为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 > hello.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