如何为Maven项目创建PPA?

我想尝试创建自己的PPA。我的项目是一个使用Maven构建的Java项目。到目前为止,我已经完成了以下工作:
- 创建了一个PPA。 - 在Launchpad上设置了一个新项目。 - 添加了一个分支,从SVN存储库导入我的项目。 - 为该分支创建了一个配方,将构建发布到我的PPA。
这就是我卡住的地方。
我已经阅读了教程并进行了大量的谷歌搜索,但是我无法找到如何构建我的项目。我可以为该分支启动构建,但是正如我预料的那样,它失败了。我猜我需要在存储库中添加一些元信息,比如makefile。在Launchpad上是否有可能构建和打包Maven项目?我还尝试在本地使用和构建.deb文件。在<./debian文件夹中创建了很多文件,但是失败了。我猜如果我在项目中指定正确的元信息,它应该能够工作,这与在Launchpad上遇到的问题相同。
我知道这是一个非常普遍的问题,但我认为在打包.deb文件方面缺乏适当的教程,即使你没有像我这样“奇特”的情况。
总结一下:
我在我的项目中需要提供哪些文件/信息,以便能够正确地构建和打包?
任何帮助都将不胜感激 :-)

1据我所知,这是可能的。我正在寻找一个解决方案,但需要一些时间。 - RobotHumans
那么???怎么做呢?这让我疯了。 - i30817
@i30817 - 抱歉,我在defcon期间不在,现在正在为Ubuntu开发一款游戏。只要其他需求允许,我会尽快回答你的问题。 - RobotHumans
我现在正试图调用debuild来查看它是否能够在上传到ppa之前构建deb包。但是没有成功: dh build --with javahelper dh_testdir dh_auto_configure jh_linkjars dh_auto_build jh_build dh_auto_test fakeroot debian/rules binary dh binary --with javahelper dh_testroot dh_prep dh_installdirs dh_auto_install dh_install cp: 无法获取“debian/tmp/bookjar.jar”的状态:没有那个文件或目录 dh_install: cp -a debian/tmp/bookjar.jar debian/bookjar/usr/share/bookjar/ 返回退出代码1 make: *** [binary] Error 2 - i30817
@aking1012 不着急。我现在也没有时间处理那个项目。 - André Stannek
嗯,问题已经解决了,我弄明白了大部分。缺少jlibs文件,删除<project>.install文件。现在卡住了,因为ppa不想用ivy下载我的依赖项。 - i30817
@i30817 是的,你必须使用Maven工具将所有依赖项本地化,并将它们全部上传以进行"离线构建"。在launchpad的构建过程中,不允许拉取依赖项。 - RobotHumans
整个事情有点糟糕,因为在使用ivy/maven下载的库时,ant项目中没有透明地支持将类路径转换为系统库。我唯一看到的与此相关的是http://fedoraproject.org/wiki/KojiMavenSupport。目前,我的项目需要进行“静态链接”,将依赖项嵌入其中。 - i30817
我猜我只能放弃这个悬赏,除非@i30817 能给我一个令我印象深刻的答案... - nanofarad
你失去50分,即使没有人得到它?我从来没研究过赏金系统。 - André Stannek
1个回答

看一下我的bookjar项目: http://code.google.com/p/bookjar/source/browse/ 特别是debian目录(尤其是debian/package.sh文件)和build.xml(ant)文件。在那个文件中,有一个新的目标'upload',它将可构建的工件上传到launchpad buildbot。
我正在使用ivy和netbeans ant基础设施,所以对你来说可能会稍有不同。然而,有一件事是确定的:你不能从远程构建服务器使用ivy或maven。你需要上传你使用的所有库,无论是以代码还是jar的形式。 ivy:retrive将文件下载到当前目录/lib,所以我的netbeans项目设置为在那里查找它的库(nblibraries.properties是用于netbeans基础设施的一部分)。详细信息请阅读build.xml文件(基本上debian/rules文件调用一个特殊的ant目标在服务器上进行构建,不会尝试创建jar文件的符号链接-因为它们已经复制到那里)。
我还利用我的项目在mercurial中的优势,在我的package.sh中构建一个changelog文件,所以如果你想要相同程度的自动化而不使用hg,就需要解决其他问题(事实上,我认为我的changelog违反了Debian changelogs的规则,因为每个更改都被视为“次要”发布)。

听起来很有前途,但在我有时间研究之前可能需要几天。 - André Stannek
忘记了:在这个方案中,你负责将上传到ppa发布中,而不是将ppa链接到一个带有看门狗文件的代码仓库,并定期构建。我更喜欢这种方式,甚至没有尝试过其他方法,但可能是可行的。我的ppa是用这种方式构建的(经过13次失败的尝试!)。此外,请注意,你的changelog必须按照OCD完美的顺序才能被debuild接受,这意味着你的hg日志也必须如此。我不得不重新初始化仓库,因为有一个“用户”没有遵循指南。 - i30817
三个月后,这比没有要好很多;-) - André Stannek
你可能不想使用hg log > changelog的技巧。它有一些可疑的要求,比如不能有任何除了数字之外的hg标签(发布版本),或者必须让所有提交者遵循Debian指南(而且由于hg不允许更改历史记录...如果发生这种情况,你要么使用一个复杂的扩展,要么重新初始化仓库...无论哪种情况都会影响远程克隆)。不过,如果你能管理好它,它确实有一个优点,就是不需要维护changelog。 - i30817
还是找不到时间去研究这个问题 :-( 只是想让你知道,我还没有忘记这个问题。 - André Stannek
顺便说一下,还有另一个(复杂的)可能性。Debhelper有一个Maven桥。它不允许你连接离线仓库,但如果你能够在launchpad中构建所需的库,并集成Maven XML以使其正常工作,你可以使用正常的launchpad基础架构进行构建。虽然看起来工作量太大了,而且由于库构建的复杂性可能无法实现。 - i30817