【问题标题】:Run .jar Files on Mac Big Sur by clicking通过单击在 Mac Big Sur 上运行 .jar 文件
【发布时间】:2021-04-10 14:18:18
【问题描述】:

我最近从 Windows 切换到 Mac,并尝试通过单击 Finder 中的图标在我的 Mac 上打开一个可执行的 .jar 文件。不知何故,mac 无法执行 .jar 文件,除非使用终端。

经过一番研究,我知道“javapackager”和“Jar Bundler”是使其可运行的方法,但我找不到这些程序的任何功能下载。

那么有什么办法可以让这些程序运行起来吗?

【问题讨论】:

    标签: java macos jar


    【解决方案1】:

    jar 文件发送给用户然后期望他们知道如何处理它的分发模型已过时 - oracle 或多或少承认绝大多数桌面Java 应用程序现在不是,也从未以这种方式部署:它们已经停止支持“JRE”的想法。这就是它或多或少正式(在那个预言机的产品中明确支持这种模式)使用工作的方式:

    • 应用程序开发人员制作了一个 java 应用程序,将其转换为一堆 jar 文件,然后以 zip 文件或使用极其简单的安装程序将其复制到某个地方。
    • 与 Oracle 签订应用合同以下载 JRE 的用户;维护这个 JRE(因为有人需要更新那个东西,或者至少告诉用户其中存在安全漏洞,如果发生这种情况)完全是用户(或者可能是操作系统维护者)和 oracle 之间的安排;应用开发者与此无关,也无法控制。
    • 如果没有可用的 JRE,用户必须注意这一点,应用开发者对此没有真正的控制权。
    • 应用程序开发人员或多或少只是祈祷他们的应用程序在双击他们的 jar 时使用的任何 JRE 都能正常运行。如果是错误的版本,您就不能包含遗留通知或类似的东西,甚至不能在 jar 文件中有意义地指定您与哪个 Java 版本兼容。

    这已经过时了,因为 oracle 已经停止发布 JRE,并且不再希望与地球上的每个最终用户系统建立关系以支持这些 JRE。

    因此,您在旧的部署机制下工作。如果您是此应用程序的所有者,请更新到新模型(例如使用 jlinkjpackager 制作 .app 并像普通 Mac 应用程序一样将其发送到 .dmg 中,这也可以让您签名,有一个漂亮的图标等)。如果你不是,是时候与这个应用程序的维护者交谈并告诉他们这样做。在此之前,您可以通过以下方式解决此问题:

    • 转到https://adoptopenjdk.net 并下载一个openjdk。
    • 安装它。
    • 在您的议程中设置定期约会:每个月左右,访问adoptopenjdk.org 并检查更新。卸载你拥有的openjdk并安装新的。 不这样做意味着您的系统可能会受到损害。 AdoptOpenJDK 并不是真的适合这种事情(除了 Oracle 的 JRE8 之外,什么都没有,但是 [A] 它现在已经有 10 年历史了,[B] oracle 已经停止支持它,或者很快就会停止支持这也是一个安全问题),因此您必须付出努力。
    • 双击罐子。

    【讨论】:

      【解决方案2】:

      实际上,我是 Mac 的新手,我只是想尝试一下,它奏效了。我所做的是,创建一个 maven 项目并添加一些插件来创建可执行的 jar 文件。 Maven 插件端;

          <build>
          <finalName>myExecutableApp</finalName>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-dependency-plugin</artifactId>
                  <version>3.1.2</version>
                  <executions>
                      <execution>
                          <id>copy-dependencies</id>
                          <phase>prepare-package</phase>
                          <goals>
                              <goal>copy-dependencies</goal>
                          </goals>
                          <configuration>
                              <outputDirectory>
                                  ${project.build.directory}/libs
                              </outputDirectory>
                          </configuration>
                      </execution>
                  </executions>
              </plugin>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-jar-plugin</artifactId>
                  <version>3.2.0</version>
                  <configuration>
                      <archive>
                          <manifest>
                              <addClasspath>true</addClasspath>
                              <classpathPrefix>libs/</classpathPrefix>
                              <mainClass>
                                  com.rcelik.executable.ExecutableMavenJar
                              </mainClass>
                          </manifest>
                      </archive>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      

      还有一些用于了解可执行 jar 文件是否正在运行的 swing 代码。

      public class ExecutableMavenJar {
      public static void main(String[] args) {
          JFrame f=new JFrame();
      
          JButton b=new JButton("click");
          b.setBounds(130,100,100, 40);
      
          f.add(b);
      
          f.setSize(400,500);
          f.setLayout(null);
          f.setVisible(true);
      }
      

      }

      在代码部分之后,我只是用 maven 打包项目。我可以通过双击它来运行可执行的 jar 文件。您能否检查一下这种创建可执行 jar 文件的方式。 顺便说一句,MacOs 默认使用 JavaLauncher.app 打开 jar 文件。

      【讨论】:

        猜你喜欢
        • 2021-05-09
        • 1970-01-01
        • 2021-03-31
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 2020-10-20
        • 2021-09-12
        相关资源
        最近更新 更多