是否有一个普通的API来从Java访问Mercurial存储库?
有Netbeans和Eclipse的插件,但与Subversion对应的插件不同,它们不使用通用的低级库,而是使用自己的包装器来调用Mercurial二进制文件.调用二进制文件是可以的(暂时),但在独立应用程序中使用这些插件似乎非常困难(在它们构建的IDE之外).
还有HgKit,但这是非常pre-alpha.
一个新选项是JavaHg,它为您提供了一个高级Java API.所述单元测试得到的它是如何与它编程(如JavaHg 0.1的)一个很好的例子:
public void commitTest() throws IOException { Repository repo = getTestRepository(); writeFile("x", "abc"); CommitCommand commit = CommitCommand.on(repo); StatusCommand status = StatusCommand.on(repo); ListstatusLines = status.lines(); Assert.assertEquals(1, statusLines.size()); Assert.assertEquals(StatusLine.Type.UNKNOWN, statusLines.get(0).getType()); AddCommand.on(repo).execute(); statusLines = status.lines(); Assert.assertEquals(1, statusLines.size()); Assert.assertEquals(StatusLine.Type.ADDED, statusLines.get(0).getType()); commit.message("Add a file").user("Martin Geisler"); Changeset cset = commit.execute(); Assert.assertEquals("Martin Geisler", cset.getUser()); statusLines = status.lines(); Assert.assertEquals(0, statusLines.size()); }
它与版本1.9及更高版本中的Mercurial命令服务器进行交互.这意味着将会有一个持久的Mercurial进程接受多个命令,因此您可以避免通常与启动Mercurial相关的启动开销.我们希望它将在即将到来的MercurialEclipse版本中使用.(我是JavaHg的作者之一.)
hg4j现在有更多(即克隆)功能,似乎正在实际开发中
你看过Jython吗?据我在这里看到的那样,它应该有助于在Java环境中使用python mercurial模块,就像JRuby对Ruby一样。