创建不需要java命令的100%独立可执行jar

显然如果你创建一个可执行jar,为了运行它你仍然需要java命令:

java -jar something.jar 

但是,如果我只是希望它在没有java命令的情况下运行,那么只需直接从命令行运行即可

 something.jar 

有没有办法在eclipse中导出我的java应用程序,以实现这一目标

Excelsior JET – http://www.excelsior-usa.com/jet.html – 声称编译为本机代码并带来自己的运行时支持,因此它不需要现有的JVM。 商业产品。

我自己没有尝试过,但多年来他们花了相当多的精力将JET作为预编译二进制文件的一种很好的部署方法。


另请注意,如果你有一个可执行/可运行的jar,可以正常使用“java -jar someting.jar”,并且你只是想以更方便的方式调用它,这是程序的工作,接受你的命令和启动java命令。

对于Linux,你可以经常添加一个别名,说“某些东西”扩展为“java -jar something.jar”,而一些命令解释器允许说所有以jars结尾的命令都应该特别执行。 具体细节取决于您使用的shell(命令行解释器)。

在Unix系统上,您可以在可执行脚本的末尾附加jar文件。

在Windows上,您必须创建批处理文件。

例如在Unix中:

 $cat HelloWorld.java public class HelloWorld { public static void main( String ... args ) { System.out.println("Hola mundo!"); } } $cat M.mf Main-Class: HelloWorld $cat hello #!/bin/sh exec java -jar $0 "$@" $javac HelloWorld.java $jar -cmf M.mf hello.jar HelloWorld.class $cat hello.jar >> hello $chmod +x hello $./hello Hola mundo! 

在Windows中,您必须创建一个批处理文件,如:

 ::hello.cmd javaw -jar hello.jar 

这具有相同的效果。

在Windows和OSX上,你可以双击jar来运行它,我很确定你也可以在Linux上添加一个触发器。

我希望这有帮助

您需要的是一个名为“Java Executable Wrapper”的工具。您可以使用它将所有类文件打包到单个可执行包中。

One i的推荐是launch4j,你可以从sourceforge launch4j.sourceforge.net下载它

Launch4J可用于从Windows环境的jar文件创建独立的可执行文件(.exe)。

问题是,Java会被JVM解释,因此您至少需要将其与您的应用程序一起发布。

为了更具体一点,Java可以编译成字节码,因此可以更快地解释它。 但是如果没有JVM,Byte-Code就无法运行。 这是Java的好处:您不需要重新编译您的应用程序以在Linux或OS X等其他平台上运行,JVM负责这一点(因为它是用本机代码编写的,并为这些平台重新编译)。

有一些编译器可以将你的Java代码转换为像C这样的本地代码,然后可以在没有JVM的情况下执行。 但这不是Java背后的想法,大多数这些工具都会嘲笑他们的工作。

如果您希望App在没有任何解释器的情况下运行,则需要使用C或C ++等编译语言

Java程序在JVM上运行,对于第一个问题,我认为没有一个编译器可以很好地完成这项工作。 对于第二个问题,因为jar文件本身不是可执行文件,所以目标机器中必须有某种设置,“执行”jar文件而不提供java命令对用户来说是方便的。 在Windows上,每个文件扩展名都有一个与之关联的程序,因此.doc文档(通常)Word作为程序关联 – 该设置由Office安装程序设置,java运行时还会在安装时设置.jar文件的设置但是在幕后,java命令将被系统使用。 所以对第二个问题的简短回答是:取决于目标机器。