【问题标题】:How to make my jar file executable by double click to open terminal如何通过双击打开终端使我的 jar 文件可执行
【发布时间】:2022-01-11 19:41:25
【问题描述】:

好吧,基本上,每次我看到这个问题都没有我正在寻找的答案,这就是我试图问自己的原因。

基本上,我在 BlueJ 上制作了一个 java 项目(遗憾的是,学校需要。但如果出现问题,我可以将其导出到其他地方(最好是 IntelliJ 或 Visual Studio Code)),但本质上,我想制作它以便我可以只需双击我的 .jar 导出,它将打开一个终端窗口并启动。但是,当我尝试此操作时,出现此错误:First Error

当我点击确定时,会出现: Second Error

现在,如果我想让 jar 在终端上运行,那么 java -jar jarFileName.jar 效果很好,但我想要的是当我双击 jar 文件时会发生这种情况;让它从终端启动和运行。

我看到的关于这个问题的所有其他答案都归咎于用户的计算机,通常会告诉他们安装某个版本的 java 或其他什么,但这不是问题。我还有其他可以完美运行的 jar 文件,例如 Minecraft Forge 安装程序或 Minecraft Spigot 安装程序(抱歉,只有 Minecraft 示例,其他使用 Java 的不多)。这也是针对一个 uni 项目的,我所在领域的其他人都不知道如何让他们的 jar 成为可执行文件,这个文件也不适用于其他任何人。

所以是的,我知道这是 jar 的编译方式或其他问题,而不是我的 PC 安装的 java 的问题。

我只是想让它可以双击以方便我将其发送给朋友,但如果有人知道我可以解决此问题的另一种方法,那就没问题了。例如,我知道我可以制作一个 Bash 文件,它只是为我做 java -jar jarFileName.jar 之类的,但我宁愿将它全部作为一个 jar 文件,所以我不知道这是否可以合并到文件中,但是是的。

另外,我真的很想要一个不涉及下载外部程序或其他任何东西的解决方案,因为我要做的就是将此文件发送给我的朋友,让他们只需双击它即可启动。

TL;DR,我必须做什么才能通过双击使我的 jar 文件真正可执行。谢谢。

【问题讨论】:

    标签: java jar executable-jar java-11 bluej


    【解决方案1】:

    要使 jar 文件可执行,您必须设置 entrypoint

    您可以通过在创建 jar 文件时将 e 选项传递给 jar 命令来执行此操作,例如:

    jar cvfe myapp.jar com.mycompany.myapp.MyApp com\mycompany\myapp
    

    这将添加指向启动类的Main-Class entry in the jar's manifest,它应该有一个main方法,例如:

    package com.mycompany.myapp;
    
    public class MyApp {
        public static void main(String[] args) { 
            // start up the application
        }
    }
    

    当您创建 JAR 文件时,它会自动接收默认的 manifest file。存档中只能有一个清单文件,并且它始终具有路径名

    META-INF/MANIFEST.MF
    

    入口点由Main-Class指定,例如:

    Manifest-Version: 1.0
    Created-By: 1.8.13_37 (Oracle Corporation)
    Main-Class: com.mycompany.myapp.MyApp
    

    如果您想让现有的 jar 文件可执行,您可以解压缩它,修改清单并再次压缩它(并重命名它,使其具有 .jar 扩展名 - jar 只是一个 zip)。

    但我认为您显示的错误不是由于 jar 无法执行,而是由于某些环境问题,导致 Java 应用程序找不到使 Java Native Integration (JNI) 工作所需的变量或路径。要解决这个问题,您必须提供更多关于您尝试使用 JNI 做什么的详细信息。

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2016-02-19
      • 1970-01-01
      • 2012-03-04
      • 2014-12-29
      • 1970-01-01
      • 2012-02-25
      • 2013-03-21
      • 2017-06-22
      相关资源
      最近更新 更多