2014-03-31 122 views
0

我想爲my Java game(當前打包爲JAR + JNLP文件)創建一個RPM包。我使用Ant作爲構建工具。我不能使用平臺依賴工具,因爲使用我的源代碼的少數開發人員使用多個操作系統,而不一定是GNU Linux。如何使用Redline RPM Java庫創建RPM包?

起初,我嘗試使用JDIC,但是它的源代碼多年來一直沒有維護,爲了重新編譯,我不得不修改大量的東西。此外,它只是在引擎蓋下調用本地RPM工具。然後,我發現RPM Ant task,但它也使用原生RPM工具。之後,我發現RPM Maven plugin,但我現在不想切換到另一個構建工具來創建RPM包。

最後,我發現Redline RPM純Java庫有一個Ant任務,有一個例子here。我仍然不明白如何使用它。我理解幾個基本字段(組,版本,發佈,名稱)的作用,我知道我必須使用「depends」來表示我的遊戲至少需要Java 1.7,但我不知道如何處理我的JAR,放置桌面快捷方式的.desktop文件的位置,以及放置調用主類的bash腳本以運行我的遊戲的位置。作爲第一步,我想創建一個二進制包。我發現了另一個使用這個庫here的例子。我是否也必須提供卸載腳本?我應該使用postinstall腳本將.desktop文件複製到桌面目錄中嗎?我應該爲第三方庫使用tarfileset嗎?我知道將JAR放入幾個RPM會更好,但我希望在做更精細但更清潔的事情之前成功做一些簡單的事情。

+1

你應該閱讀你的目標分發包裝準則,並按照他們。一般而言,您希望將二進制文件放在/ usr/bin中,無論您計劃從何處讀取數據(指南可能都有建議,甚至可能包含自動的這些路徑的宏),都與桌面文件相同。你不應該需要一個腳本,除非你必須爲系統做一些事情(比如添加一個用戶),rpm不能爲你處理(它處理複製/安裝文件)。 –

+0

我沒有可執行文件,我需要調用「java -jar tuer.jar」來運行我的遊戲。類文件和數據(圖像,聲音,...)位於JAR中。您提醒我,Linux發行版的包裝準則略有不同。在Mageia下,遊戲可執行文件被放入/ usr/games。 XDG_DESKTOP_DIR未在KDE下設置,我必須查看.config/user-dirs。dirs:s – gouessej

+1

您提到'調用主類來運行我的遊戲的bash腳本,這是您的'可執行文件'。在這種情況下,JAR是你的數據(儘管在這種情況下,你可能會這樣做,但是在java中,如果你不想自己管理路徑,那麼在java中會對你的java路徑施加一些限制)。在這種情況下,你可能只需要創建一個'/ usr/share/$ game'或類似的目錄,將你的JARS放在那裏,並將腳本安裝到'/ usr/bin/$ game'中並完成。 (或者任何適合您的目標包裝方案的系統。) –

回答

0

我解決了我的問題here。我只需添加一個簡短的腳本來運行應用程序。 PS:順便說一下,我現在使用我自己的工具(它使用Redline RPM),它有完整的文檔,開放源代碼(在GPL下),也可以用於DEB,APP和EXE(通過NSIS)它叫做Java Native Deployment Toolkit

1

我寫了一篇關於如何使用紅線here

基本上你所要做的建一個空轉一切一個簡單的教程是:

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); 

紅線行家依賴

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

幹得好,我在JogAmp wiki上提到過你的教程。 – gouessej