【问题标题】:creating 100% standalone executable jar that doesn't require the java command创建不需要 java 命令的 100% 独立可执行 jar
【发布时间】:2011-10-06 21:40:29
【问题描述】:

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

java -jar something.jar

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

something.jar 

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

【问题讨论】:

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

标签: java eclipse jar export executable


【解决方案1】:

在 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】:

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

    我自己还没有尝试过,但多年来他们花了很多精力将 JET 推向市场,将其作为预编译二进制文件的出色部署方法。


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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        有一些编译器可以将您的 Java 代码转换为像 C 这样的本地代码,然后可以在没有 JVM 的情况下执行。但这并不是 Java 背后的理念,而且这些工具中的大多数都做得很糟糕。

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2017-07-06
            • 2020-04-17
            • 2011-07-10
            • 2019-06-19
            • 2012-10-19
            • 2015-12-20
            • 2013-06-01
            • 2011-12-30
            • 1970-01-01
            相关资源
            最近更新 更多