【发布时间】:2021-04-10 14:18:18
【问题描述】:
我最近从 Windows 切换到 Mac,并尝试通过单击 Finder 中的图标在我的 Mac 上打开一个可执行的 .jar 文件。不知何故,mac 无法执行 .jar 文件,除非使用终端。
经过一番研究,我知道“javapackager”和“Jar Bundler”是使其可运行的方法,但我找不到这些程序的任何功能下载。
那么有什么办法可以让这些程序运行起来吗?
【问题讨论】:
我最近从 Windows 切换到 Mac,并尝试通过单击 Finder 中的图标在我的 Mac 上打开一个可执行的 .jar 文件。不知何故,mac 无法执行 .jar 文件,除非使用终端。
经过一番研究,我知道“javapackager”和“Jar Bundler”是使其可运行的方法,但我找不到这些程序的任何功能下载。
那么有什么办法可以让这些程序运行起来吗?
【问题讨论】:
将jar 文件发送给用户然后期望他们知道如何处理它的分发模型已过时 - oracle 或多或少承认绝大多数桌面Java 应用程序现在不是,也从未以这种方式部署:它们已经停止支持“JRE”的想法。这就是它或多或少正式(在那个预言机的产品中明确支持这种模式)使用工作的方式:
这已经过时了,因为 oracle 已经停止发布 JRE,并且不再希望与地球上的每个最终用户系统建立关系以支持这些 JRE。
因此,您在旧的部署机制下工作。如果您是此应用程序的所有者,请更新到新模型(例如使用 jlink 和 jpackager 制作 .app 并像普通 Mac 应用程序一样将其发送到 .dmg 中,这也可以让您签名,有一个漂亮的图标等)。如果你不是,是时候与这个应用程序的维护者交谈并告诉他们这样做。在此之前,您可以通过以下方式解决此问题:
【讨论】:
实际上,我是 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 文件。
【讨论】: