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

问题描述 投票:0回答:5

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

java -jar something.jar

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

something.jar 

有没有办法在 Eclipse 中导出我的 Java 应用程序以完成这样的任务

java eclipse jar export executable
5个回答
4
投票

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

我希望这有帮助


2
投票

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

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

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


1
投票

2024年更新

根据 https://en.wikipedia.org/wiki/Excelsior_JET 华为于 2019 年购买了它们,并将该产品从市场上撤下。

但是,Oracle 现在有 GraalVM,可以做类似的事情。请参阅 https://www.graalvm.org/latest/reference-manual/native-image/#build-a-native-executable 了解介绍。

2011年答案

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

我自己没有尝试过,但他们多年来花费了相当多的努力来推销 JET 作为预编译二进制文件的绝佳部署方法。


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

对于 Linux,您可以经常添加一个别名,表示“something”扩展为“java -jar Something.jar”,并且某些命令解释器允许表示所有以 jar 结尾的命令都应该专门执行。确切的详细信息取决于您使用的 shell(命令行解释器)。


0
投票

问题是,Java 由 JVM 解释,因此您至少需要将其与您的应用程序一起提供。

更具体地说,Java 被编译为字节码,因此可以更快地解释它。但如果没有 JVM,字节码就无法运行。这是 Java 的优点:您无需重新编译应用程序即可在 Linux 或 OS X 等其他平台上运行,JVM 会处理这一点(因为它是用本机代码编写的,并针对这些平台重新编译)。

有一些编译器可以将 Java 代码转换为 C 等本机代码,然后可以在没有 JVM 的情况下执行。但这不是 Java 背后的想法,而且大多数工具的功能都很糟糕。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.