Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建100%独立的可执行jar,该jar不';不需要java命令_Java_Eclipse_Jar_Export_Executable - Fatal编程技术网

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

创建100%独立的可执行jar,该jar不';不需要java命令,java,eclipse,jar,export,executable,Java,Eclipse,Jar,Export,Executable,显然,如果您创建了一个可执行jar,为了运行它,您仍然需要java命令: java -jar something.jar 但是,如果我只是想让它在没有java命令的情况下运行,那么直接从命令行运行该怎么办 something.jar 有没有一种方法可以在eclipse中导出我的java应用程序来完成这样的任务呢?问题是,java是由JVM解释的,所以你至少需要在应用程序中附带它 更具体地说,Java被编译成字节码,这样可以更快地解释它。但是没有JVM,字节码就无法运行。这是Java好的一面

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

java -jar something.jar
但是,如果我只是想让它在没有java命令的情况下运行,那么直接从命令行运行该怎么办

something.jar 

有没有一种方法可以在eclipse中导出我的java应用程序来完成这样的任务呢?问题是,java是由JVM解释的,所以你至少需要在应用程序中附带它

更具体地说,Java被编译成字节码,这样可以更快地解释它。但是没有JVM,字节码就无法运行。这是Java好的一面:你不需要重新编译你的应用程序来运行在其他平台上,比如Linux或OSX,JVM会处理这一点(因为它是用本机代码编写的,并且是为这些平台重新编译的)

有一些编译器可以将Java代码转换为像C这样的本机代码,然后在没有JVM的情况下执行。但这并不是Java背后的想法,这些工具中的大多数都做得很差劲


如果你想让你的应用程序在没有任何解释器的情况下运行,你需要使用一种编译过的语言,比如C或C++

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

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

我希望这有助于

ExcelsiorJet--声称编译为本机代码并提供自己的运行时支持,因此它不需要现有的JVM。商业产品

我自己并没有尝试过,但多年来,他们花了不少精力将JET作为预编译二进制文件的一种优秀部署方法推向市场


另外请注意,如果您有一个可执行/可运行的jar,它可以与“java-jar someting.jar”配合使用,并且您只希望能够以更方便的方式调用它,那么这就是程序接受您的命令并启动java命令的工作


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

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

我推荐的是launch4j,您可以从sourceforge下载


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

不可以。jar文件不是可执行文件,而是可执行(编译)类和资源的存档文件。