使用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
,最简单的方法是:
- 要去下载区 ,
- 点击
JRE DOWNLOAD
, - 选择适用于
Mac OS X
的JRE
的tar.gz
版本,该版本目前为jre-8u112-macosx-x64.tar.gz
。 - 解压缩您所选文件夹中存档的内容,我们将其称为
${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
:
- 双击dmg文件 ,它会自动挂载图像,
- 然后你可以双击
TestProject.app
,你会看到一个图标出现并迅速消失,因为测试程序很短 - 您可以通过从终端启动
cat $TMPDIR/MyClass*
来检查它是否正常工作,然后您将看到测试应用程序创建的临时文件的内容。
5.将资源添加到dmg文件
要向生成的dmg文件添加资源,可以将additionalResources
与fileSet
一起使用。
sh.tak.appbundler appbundle-maven-plugin 1.1.0 ... /path/to/my/resources/folder *.pdf ...
此示例将从/path/to/my/resources/folder
所有pdf
文件添加到生成的dmg文件中 。
6.向应用程序文件添加资源
要向生成的应用程序文件添加资源,可以将additionalResources
与fileSet
一起使用。
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
,它们将自动包含在你的应用程序的类路径中,这样你就可以访问他们很容易。