如何使用红线RPM Java库创建RPM包?

如何使用红线RPM Java库创建RPM包?,java,rpm,Java,Rpm,我想为当前打包为JARs+JNLP文件的RPM包创建一个RPM包。我使用Ant作为构建工具。我不能使用依赖于平台的工具,因为使用我的源代码的少数开发人员使用多个操作系统,与我不同的不一定是GNU Linux 起初,我试图使用它,但它的源代码已经多年没有维护过了,我不得不修改很多东西,只是为了让它重新编译。此外,它只是在引擎盖下调用本机RPM工具。然后,我发现,但它在引擎盖下也使用本地RPM工具。在那之后,我找到了一个RPM包,但我现在不想切换到另一个构建工具来创建RPM包 最后,我找到了红线RP

我想为当前打包为JARs+JNLP文件的RPM包创建一个RPM包。我使用Ant作为构建工具。我不能使用依赖于平台的工具,因为使用我的源代码的少数开发人员使用多个操作系统,与我不同的不一定是GNU Linux

起初,我试图使用它,但它的源代码已经多年没有维护过了,我不得不修改很多东西,只是为了让它重新编译。此外,它只是在引擎盖下调用本机RPM工具。然后,我发现,但它在引擎盖下也使用本地RPM工具。在那之后,我找到了一个RPM包,但我现在不想切换到另一个构建工具来创建RPM包

最后,我找到了红线RPM纯Java库,它有一个Ant任务,下面是一个例子。我还是不知道怎么用它。我了解一些基本字段组、版本、发布、名称的作用,我知道我必须使用depends来表示我的游戏至少需要Java 1.7,但我不知道如何处理我的JAR,如何放置桌面快捷方式的.desktop文件,以及如何放置调用主类来运行我的游戏的bash脚本。作为第一步,我想创建一个二进制包。我发现了使用此库的另一个示例。我是否也必须提供卸载脚本?我应该使用postinstall脚本将.desktop文件复制到桌面目录中吗?我应该为第三方库使用tarfileset吗?我知道把罐子放进几个RPM会更好,但我想在做更精细但更干净的事情之前先做一些简单的事情。

我解决了我的问题。我只需要添加一个短脚本来运行应用程序

顺便说一句,我现在使用我自己的工具,在引擎盖下使用红线RPM,它是完全有文档记录的,GPL下的免费软件,也可以通过NSIS为DEB、APP和EXE工作。我解决了我的问题。我只需要添加一个短脚本来运行应用程序


顺便说一句,我现在使用我自己的工具,它在引擎盖下使用红线RPM,它是完全有文档记录的,在GPL下的免费软件,也可以通过NSIS为DEB、APP和EXE工作。我写了一篇关于如何使用红线的简单教程

基本上,构建一个空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);
红线maven依赖项

<dependency>
    <groupId>org.redline-rpm</groupId>
    <artifactId>redline</artifactId>
    <version>1.2.1</version>
</dependency>

我写了一篇关于如何使用红线的简单教程

基本上,构建一个空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);
红线maven依赖项

<dependency>
    <groupId>org.redline-rpm</groupId>
    <artifactId>redline</artifactId>
    <version>1.2.1</version>
</dependency>

您应该阅读目标分销的包装指南并遵循它们。一般来说,如果您希望二进制文件位于/usr/bin中,那么无论您打算从指南中读取数据到哪里,都可能会对这些路径提出建议,甚至可能会自动生成宏,桌面文件也是如此。你不应该需要脚本,除非你必须对系统做一些事情,比如添加一个rpm不能为你处理的用户,而是复制/安装文件。我没有可执行文件,我需要调用java-jar tuer.jar来运行我的游戏。类文件和数据图像,声音。。。它们在罐子里。你提醒我Linux发行版的打包指南略有不同。在Mageia下,游戏可执行文件被放入/usr/games中。XDG_DESKTOP_DIR不是在KDE下设置的,我必须看一下.config/user-dirs.dirs:sYou提到了调用主类来运行我的游戏的bash脚本,这是您的可执行文件。在本例中,JAR是您的数据,尽管在java中,如果您不想自己管理路径,可能会对您的应用程序施加一些java路径约束。在这种情况下,您可能只需要将自己设置为/usr/share/$game或类似的目录,将jar放入其中,然后将脚本安装到/usr/bin/$game中,就可以完成了。或者任何适合你的目标包装方案的系统。谢谢。好的,我必须将TuerBash脚本放入/usr/bin或/usr/games,具体取决于发行版,并将所有jar放入/usr/share/tuer。当你写“完成”时,这是否意味着就这样?我不是为了编写卸载脚本而写的,是吗?如果您所做的只是使用%files部分或java库的等效部分安装文件,那么就是这样。RPM负责为您安装和卸载列出的文件,这是它的工作。对于RPM无法为您处理的自定义操作,您只需要脚本。我建议您可以尝试使用spec文件和rpmbuild工具手工制作rpm,首先查看它们是如何工作的,rpm是如何创建的,然后将其移植到java库中。您应该阅读目标发行版的打包指南并遵循它们。通常,您希望二进制文件位于/usr/bin中,您的数据位于何处
r您计划从指南中阅读它,可能会对这些路径有建议,甚至可能有自动宏,对于桌面文件也是如此。你不应该需要脚本,除非你必须对系统做一些事情,比如添加一个rpm不能为你处理的用户,而是复制/安装文件。我没有可执行文件,我需要调用java-jar tuer.jar来运行我的游戏。类文件和数据图像,声音。。。它们在罐子里。你提醒我Linux发行版的打包指南略有不同。在Mageia下,游戏可执行文件被放入/usr/games中。XDG_DESKTOP_DIR不是在KDE下设置的,我必须看一下.config/user-dirs.dirs:sYou提到了调用主类来运行我的游戏的bash脚本,这是您的可执行文件。在本例中,JAR是您的数据,尽管在java中,如果您不想自己管理路径,可能会对您的应用程序施加一些java路径约束。在这种情况下,您可能只需要将自己设置为/usr/share/$game或类似的目录,将jar放入其中,然后将脚本安装到/usr/bin/$game中,就可以完成了。或者任何适合你的目标包装方案的系统。谢谢。好的,我必须将TuerBash脚本放入/usr/bin或/usr/games,具体取决于发行版,并将所有jar放入/usr/share/tuer。当你写“完成”时,这是否意味着就这样?我不是为了编写卸载脚本而写的,是吗?如果您所做的只是使用%files部分或java库的等效部分安装文件,那么就是这样。RPM负责为您安装和卸载列出的文件,这是它的工作。对于RPM无法为您处理的自定义操作,您只需要脚本。我建议您可以尝试使用spec文件和rpmbuild工具手工制作rpm,首先查看它们是如何工作的,rpm是如何创建的,然后将其移植到java库中。干得好,我在JogAmp wiki中提到了您的教程。干得好,我在JogAmp wiki中提到了您的教程。