如何使JAR文件Linux可执行(范例)
Xn_warm
・3 分钟阅读
每个Java程序员都知道 - 或者应该知道 - 可以创建一个可运行的Java包存档(JAR),这样,为了启动一个应用程序,只需在Java解释器命令行上指定jar文件名( -jar参数)即可。例如:
$ java -jar helloworld.jar
有很多教程展示了如何使用Ant,Maven,Eclipse,Netbens等来实现这个特性。
无论如何,它只需要在jar包中添加一个MANIFEST.MF
文件,Manifest必须包含一个指定用于定义应用程序主要方法的类的项Main-Class
,例如:
$ javac HelloWorld.java
$ echo Main-Class: HelloWorld > MANIFEST.MF
$ jar -cvmf MANIFEST.MF helloworld.jar HelloWorld.class
但是这仍然需要你的用户使用-jar
选项调用Java解释器,
这就是高级技巧!
这种技术是基于将通用二进制负载附加到Linux shell script的能力,在这里阅读更多内容: http://www.linuxjournal.com/content/add-binary-payload-your-shell-scripts
利用这种可能性,只需将可运行的jar文件嵌入到Bash脚本文件中即可,执行时脚本将启动Java解释器,将自己指定为要运行的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
exec"$java" $java_args -jar $MYSELF"$@"
exit 1
将jar文件追加到保存的脚本,并且将执行权限授予由以下命令导致的文件:
cat stub.sh helloworld.jar > hello.run && chmod +x helloworld.run
这就是全部!
现在你可以在shell终端上直接输入helloworld.run
来执行这个。
脚本足够聪明,可以将任何命令行参数透明地传递给Java应用程序,很酷是不是!
如果您是Windows用户,显然这不起作用(除非您运行像Cygwin这样的Linux兼容层)。
但仍然有能够将Java应用程序包装到本机Windows .exe二进制文件中的工具,与本教程中解释的有同样效果,请参阅http://launch4j.sourceforge.net/示例