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

时间:2011-07-16 20:50:42

标签: java eclipse jar export executable

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

java -jar something.jar

但如果我只想让它在没有java命令的情况下运行,那么只需直接从命令行

something.jar 

有没有办法在eclipse中导出我的java应用程序才能完成这样的

5 个答案:

答案 0 :(得分:3)

在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上添加一个触发器。

我希望这个帮助

答案 1 :(得分:1)

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

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


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

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

答案 2 :(得分:1)

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

One i推荐是launch4j,您可以从sourceforge launch4j.sourceforge.net下载

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

答案 3 :(得分:0)

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

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

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

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

答案 4 :(得分:0)

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