Mercurial API for Java?

是否有一个普通的API来从Java访问Mercurial存储库?

有Netbeans和Eclipse的插件,但与Subversion对应的插件不同,它们不使用通用的低级库,而是使用自己的包装器来调用Mercurial二进制文件。 调用二进制文件是可以的(目前),但在独立应用程序中使用这些插件似乎非常困难(在它们构建的IDE之外)。

还有HgKit,但这是非常pre-alpha。

一个新选项是JavaHg ,它为您提供了一个高级Java API。 unit testing给出了如何用它编程的一个很好的例子(从JavaHg 0.1开始):

public void commitTest() throws IOException { Repository repo = getTestRepository(); writeFile("x", "abc"); CommitCommand commit = CommitCommand.on(repo); StatusCommand status = StatusCommand.on(repo); List statusLines = 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现在有更多(即克隆)function,似乎正在实际开发中

你看过Jython吗? 据我所知,它应该有助于在Java环境中使用python mercurial模块,就像JRuby为Ruby做的那样。

Maven SCM插件似乎有一个Mercurial提供程序 。 但是,我不知道该提供程序在您的情况下有多适用(即它与Maven体系结构的关联程度和/或它与hg的接口程度)。

还有一个hg4j但是现在它只允许读取存储库。