当前位置:  开发笔记 > 编程语言 > 正文

Mercurial API for Java?

如何解决《MercurialAPIforJava?》经验,为你挑选了3个好方法。

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

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

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



1> Martin Geisl..:

一个新选项是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);

    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的作者之一.)


@shabunc:你是正确的。JavaHg使用的是Mercurial唯一稳定的API:命令行。这意味着如果基础数据结构发生更改,它将继续工作。但是,您是正确的,与JGit不同,它不是仅Java的库,因为您也需要安装Mercurial。

2> Mykel Alvis..:

hg4j现在有更多(即克隆)功能,似乎正在实际开发中



3> Keltia..:

你看过Jython吗?据我在这里看到的那样,它应该有助于在Java环境中使用python mercurial模块,就像JRuby对Ruby一样。


完成后,您现在可以使用--pure标志来setup.py,以便使用在mercurial / pure下找到的模块。但是请注意,这会带来很大的速度损失(不过,我不知道Jython的票价如何)。
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有