是否有一个普通的API可以从Java访问Mercurial存储库?
有Netbeans和Eclipse的插件,但与Subversion对应的插件不同,它们不使用通用的低级库,而是使用自己的包装器来调用Mercurial二进制文件。调用二进制文件是可以的(现在),但在独立应用程序中使用这些插件似乎非常困难(在它们构建的IDE之外)。
还有HgKit,但这是非常pre-alpha。
答案 0 :(得分:18)
一个新选项是JavaHg,它为您提供了一个高级Java API。 unit tests给出了一个很好的例子,说明如何用它编程(从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<StatusLine> 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 command server进行交互。这意味着将会有一个持久的Mercurial流程接受多个命令,因此您避免通常与启动Mercurial相关的启动开销。我们希望它将在即将到来的MercurialEclipse版本中使用。 (我是JavaHg的作者之一。)
答案 1 :(得分:8)
hg4j现在有更多(即克隆)功能,似乎正在实际开发中
答案 2 :(得分:4)
答案 3 :(得分:3)
Maven SCM plugin似乎有一个Mercurial provider available。但是,我不知道该提供程序在您的情况下有多适用(即它与Maven体系结构的关联程度和/或它与hg的接口程度)。
答案 4 :(得分:3)
还有一个hg4j,但现在它只允许读取存储库。