gpt4 book ai didi

java - 使用来自 GNU/Linux 的 maven 为 Mac 用户捆绑 Java 程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:47 24 4
gpt4 key购买 nike

我正在尝试为 Mac 用户捆绑一个 java 程序。我首先找到了this article这解释了如何使用 Ant 来完成它,然后我找到了 this这似乎非常适合 Maven。

所以我在我的 pom 中添加了:

<plugin>
<groupId>sh.tak.appbundler</groupId>
<artifactId>appbundle-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<mainClass>xxx</mainClass>
<iconFile>xxx</iconFile>
<jrePath>???</jrePath>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
</plugin>

(我还发现 this article 解释了有关 Mac bundle 的一些细节以及为什么要使用 appbundler)

唯一的问题是,在我找到的每个示例中,我都看到了 <jrePath>xxx.jdk</jrePath> .但是我在 Ubuntu 下运行它,所以我只有 GNU/Linux jdk。我在哪里可以找到 Mac jdk?关于oracle website ,我只能找到dmg文件。我提取了 dmg 并得到了一个 hfs。我安装了 hfs 并得到了一个 pkg。我提取了 pkg,现在有更多文件,我不知道如何处理...

最佳答案

以下是我在 Ubuntu 16.04.1 LTS 上对测试项目所做的逐步操作。

在您的情况下,第 1 步到第 3 步将在您的 GNU/Linux 环境中完成,最后一步将在 Mac OS X 上完成。

1。下载JRE

因为您只需要JRE,所以最简单的做法是:

  1. 转到 download area ,
  2. 点击 JRE DOWNLOAD ,
  3. Mac OS X 选择 tar.gz 版本的 JRE 目前是 jre-8u112-macosx-x64 .tar.gz.
  4. 将存档内容解压到您选择的文件夹中,我们将调用该文件夹 ${jre-folder}(例如 /foo/bar/jre1.8.0_112.jre)。

2。创建我的测试项目

我典型的maven项目结构:

TestProject└── src|   └── main|       └── java|           └── my|               └── pkg|                   └── MyClass.java└── pom.xml

My class my.pkg.MyClass which actually does an arbitrary task. Here, it simply dumps the system properties into a temporary file, just to be able to easily check that it has been called:

package my.pkg;

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class MyClass {
public static void main(String[] args) throws IOException {
Path path = Files.createTempFile("MyClass", "txt");
try (BufferedWriter writer = Files.newBufferedWriter(path)) {
System.getProperties()
.entrySet()
.stream()
.forEach(
entry -> {
try {
writer.write(entry.getKey() + "=" + entry.getValue() + "\n");
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
);
}
}
}

我的 pom 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>TestProject</groupId>
<artifactId>TestProject</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>sh.tak.appbundler</groupId>
<artifactId>appbundle-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<mainClass>my.pkg.MyClass</mainClass>
<!--
For example
<jrePath>/foo/bar/jre1.8.0_112.jre</jrePath>
-->
<jrePath>${jre-folder}</jrePath>
<generateDiskImageFile>true</generateDiskImageFile>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

3。构建我的测试项目

只需从目录 TestProject 的根目录启动命令 mvn package appbundle:bundle

这将在 target 文件夹中构建 dmg 文件,其中包含适用于 Mac OS XJRE > 包括在内,在这种特殊情况下,它将被称为 TestProject-0.1-SNAPSHOT.dmg

4。测试我的测试项目

在目标 Mac OS X 上:

  1. 双击dmg文件,会自动挂载镜像,
  2. 然后您可以双击TestProject.app,您会看到一个图标出现并很快消失,因为测试程序相当短
  3. 您可以通过从终端启动 cat $TMPDIR/MyClass* 来检查它是否正常工作,然后您将看到由测试应用程序创建的临时文件的内容。<

5。向dmg文件添加资源

要将资源添加到生成的 dmg 文件,您可以使用带有 fileSetadditionalResources

<plugin>
<groupId>sh.tak.appbundler</groupId>
<artifactId>appbundle-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
...
<additionalResources>
<fileSet>
<directory>/path/to/my/resources/folder</directory>
<includes>
<include>*.pdf</include>
</includes>
</fileSet>
</additionalResources>
</configuration>
...
</plugin>

此示例会将 /path/to/my/resources/folder 中的所有 pdf 文件添加到生成的 dmg 文件 中。

6。向应用文件添加资源

要将资源添加到生成的app 文件,您可以将additionalResourcesfileSet 一起使用。

<plugin>
<groupId>sh.tak.appbundler</groupId>
<artifactId>appbundle-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
...
<additionalBundledClasspathResources>
<fileSet>
<directory>/path/to/my/resources/folder</directory>
<includes>
<include>*.pdf</include>
</includes>
</fileSet>
</additionalBundledClasspathResources>
</configuration>
...
</plugin>

此示例会将所有 pdf 文件从 /path/to/my/resources/folder 添加到生成的 app 文件/Contents/Java/lib,它们将自动包含到您的应用程序的类路径中,以便您能够轻松访问它们。

关于java - 使用来自 GNU/Linux 的 maven 为 Mac 用户捆绑 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39193868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com