我想为my Java game创建一个RPM包(目前打包为JARs + JNLP文件)。我使用Ant作为构建工具。我不能使用依赖于平台的工具,因为使用我的源代码的少数开发人员使用多个操作系统,不一定是GNU Linux。
起初,我尝试使用JDIC,但其源代码已经维护多年,我不得不修改大量内容以使其重新编译。而且,它只是调用本机RPM工具。然后,我找到RPM Ant task但它也使用了本机RPM工具。之后,我找到RPM Maven plugin,但我现在不想切换到另一个构建工具来创建RPM包。
最后,我发现Redline RPM纯Java库有一个Ant任务,有一个例子here。我仍然不明白如何使用它。我理解一些基本字段(组,版本,发布,名称)的作用,我知道我必须使用"依赖"表明我的游戏至少需要Java 1.7,但我不知道如何处理我的JAR,在哪里放置桌面快捷方式的.desktop文件以及在哪里放置调用主类的bash脚本来运行我的比赛。作为第一步,我想创建一个二进制包。我找到了另一个使用此库here的示例。我是否还必须提供卸载脚本?我应该使用postinstall脚本将.desktop文件复制到桌面目录中吗?我应该为第三方库使用tarfileset吗?我知道将JAR放入几个RPM会更好,但我想在做更精细但更干净的事情之前成功做一些简单的事情。
答案 0 :(得分:3)
我写了一个关于如何使用红线here
的简单教程基本上你需要做的就是建立一个空的rpm:
org.redline_rpm.Builder builder = new Builder();
File directory = new File(".");
builder.setType(RpmType.BINARY);
builder.setPlatform(Architecture.X86_64, Os.LINUX);
builder.setPackage("name", "1", "1");
builder.setDescription("Description");
builder.setSummary("Summary");
builder.build(directory);
您可以添加对某些命令的依赖:示例
builder.addDependencyMore("tar", "0");
builder.addDependencyMore("python", "0");
builder.addDependencyMore("wget", "0");
然后您也可以添加一些预安装脚本或安装后的脚本和文件。
builder.setPostInstallScript(xxx);
File tarball = new File("/the/dir/of/your/file/file.tar.gz");
builder.addFile("/where/to/put/it/file.tar.gz", tarball);
Redline maven依赖
<dependency>
<groupId>org.redline-rpm</groupId>
<artifactId>redline</artifactId>
<version>1.2.1</version>
</dependency>
答案 1 :(得分:1)
我解决了我的问题here。我只需添加一个简短的脚本来运行该应用程序。
PS:顺便说一句,我现在使用我自己的工具(它使用引擎盖下的Redline RPM),它是完全记录的,开源(在GPL下)并且也适用于DEB,APP和EXE(通过NSIS),它是叫Java Native Deployment Toolkit。