使用GNU / Linux的maven为Mac用户捆绑Java程序

我正在尝试为Mac用户捆绑一个java程序。 我首先发现这篇文章解释了如何使用Ant,然后,我发现这对于Maven来说似乎是完美的。

所以我加入了我的pom:

 sh.tak.appbundler appbundle-maven-plugin 1.1.0  xxx xxx ???    package  bundle     

(我还发现这篇文章解释了有关Mac软件包的一些细节以及为什么要使用appbundler)

唯一的问题是,在我找到的每个例子中,我都看到xxx.jdk 。 但是我在Ubuntu下运行它,所以我只有GNU / Linux jdk。 我在哪里可以找到Mac jdk? 在oracle网站上 ,我只能找到dmg文件。 我提取了dmg并得到了一个hfs。 我安装了hfs并获得了一个pkg。 我提取了pkg,现在有更多文件,我不知道该怎么办…

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

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

1.下载JRE

由于您只需要JRE ,最简单的方法是:

  1. 要去下载区 ,
  2. 点击JRE DOWNLOAD
  3. 选择适用于Mac OS XJREtar.gz版本,该版本目前为jre-8u112-macosx-x64.tar.gz
  4. 解压缩您所选文件夹中存档的内容,我们将其称为${jre-folder} (例如/foo/bar/jre1.8.0_112.jre )。

2.创建我的测试项目

我典型的maven项目结构:

 TestProject
 └──src
 |  └──主要
 |  └──java
 |  └──我的
 |  └──pkg
 |  └──MyClass.java
 └──pom.xml

我的类my.pkg.MyClass实际上执行任意任务。 在这里,它只是将系统属性转储到临时文件中,只是为了能够轻松检查它是否已被调用:

 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文件:

   4.0.0 TestProject TestProject 0.1-SNAPSHOT jar    org.apache.maven.plugins maven-compiler-plugin  1.8 1.8    sh.tak.appbundler appbundle-maven-plugin 1.1.0  my.pkg.MyClass  ${jre-folder} true    package  bundle        

3.构建我的测试项目

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

这将在target文件夹中构建dmg文件 ,其中包含JRE for Mac OS X ,在这种特殊情况下,它将被称为TestProject-0.1-SNAPSHOT.dmg

4.测试我的测试项目

在目标Mac OS X

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

5.将资源添加到dmg文件

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

  sh.tak.appbundler appbundle-maven-plugin 1.1.0  ...   /path/to/my/resources/folder  *.pdf     ...  

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

6.向应用程序文件添加资源

要向生成的应用程序文件添加资源,可以将additionalResourcesfileSet一起使用。

  sh.tak.appbundler appbundle-maven-plugin 1.1.0  ...   /path/to/my/resources/folder  *.pdf     ...  

这个例子将把/path/to/my/resources/folder所有pdf文件添加到生成的app文件/Contents/Java/lib ,它们将自动包含在你的应用程序的类路径中,这样你就可以访问他们很容易。