我一直在寻找许多类似的post,但我仍然无法find我的答案。 我想将一个.java程序转换成一个Linux可执行文件,没有.jar扩展名。 我该怎么做? 我正在尝试使用launch4j java包装,JWrapper,IzPack,制作一个.sh,制作一个.bat,使用java -jar myFile.jar等来运行它,但是它们都没有工作。 有些程序很复杂,很难debugging。 有没有简单的方法将.java文件或.jar文件转换为Linux可执行文件?
我需要将这个程序作为一个Linux可执行程序整体传递给另一个以此程序为参数的程序。
使用Ubuntu Preseed和打包器的无密码sudo
在Windows上使用内置python构build软件安装程序
为Linux封装专有软件
阻止应用程序的所有其他input,并通过Java中的包装器进行控制
我找到了一个解决方案,这正是我经过几个小时的搜索和尝试后所想要的。 它是在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