我正在尝试为Mac用户捆绑一个Java程序。我首先发现这篇文章解释了如何使用Ant进行操作,然后发现这对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>
(我也发现这篇文章解释了有关Mac捆绑软件以及为何使用appbundler的一些详细信息)
唯一的问题是,在发现的每个示例中,我都看到了<jrePath>xxx.jdk</jrePath>
。但是我在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中完成。
JRE
由于您只需要JRE
,所以最简单的方法是:
JRE DOWNLOAD
,tar.gz
的版本JRE
为Mac OS X
这是目前jre-8u112-macosx-x64.tar.gz
。${jre-folder}
(例如/foo/bar/jre1.8.0_112.jre
)。我典型的Maven项目结构:
测试项目
└──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
档案:
<?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>
只需mvn package appbundle:bundle
从目录的根目录启动命令TestProject
。
这将在 包含 for 的文件夹中构建 dmg文件 ,在这种情况下,它将称为。target
JRE``Mac OS X
TestProject-0.1-SNAPSHOT.dmg
在目标上Mac OS X
:
TestProject.app
,您会看到一个图标出现,并由于测试程序很短而迅速消失。cat $TMPDIR/MyClass*
从终端启动来检查它是否正常工作,然后您将看到由测试应用程序创建的临时文件的内容。将资源添加到生成的 dmg文件 ,你可以使用additionalResources
一个fileSet
。
<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>
此示例将把所有pdf
文件添加/path/to/my/resources/folder
到生成的 dmg文件中 。
将资源添加到生成的 应用程序文件 ,你可以使用additionalResources
一个fileSet
。
<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
到生成的 应用程序文件
到/Contents/Java/lib
,他们将被自动纳入到应用程序的类路径,这样你就可以方便地访问它们。
null 支持与平台无关的应用程序图标 支持对JAR的自动更新 运行my.jar时对JRE参数的支持 Linux支持(.deb或.rpm)
这让我很惊讶,因为如果我没有安装Java的话,我怎么能开发Android应用呢?!实际上,Android Studio附带了捆绑的JDK/JRE(位于),但是系统没有找到它:executive给出 将设置为没有帮助--不喜欢它是一个目录。 问:我不想安装新的JDK,如果我已经有一个在Android Studio。如何将其设置为系统默认值?
我正在将我的spring-java项目转移到OSGi。 我有一些依赖项,这些依赖项在spring ebr repo或maven repo中不能作为包提供。处理它们的最佳方法是什么? null
本文向大家介绍GNU/Linux 基本的Linux实用程序,包括了GNU/Linux 基本的Linux实用程序的使用技巧和注意事项,需要的朋友参考一下 例子 Linux几乎可以执行所有任务的命令,并且其中大多数都是直观且易于解释的。 在Linux中获得帮助 命令 易用性 man <name> 阅读<名称>的手册页。 man <section> <name> 阅读与给定部分相关的<name>手册页。
在感觉自己已经掌握了如何使用OSGi之后,我尝试向我的应用程序添加第三方依赖,特别是log4j2,该应用程序使用ApacheFelix并与maven捆绑插件捆绑。不幸的是,我似乎陷入了依赖地狱。 我尝试过使用许多maven捆绑包策略,如导入包,嵌入依赖,wrapImportPackage,Embed-Transitive,以及设置特定的版本号,仅举几例。以下是我的pom在这个插件中的样子: 我觉得