首页 > 解决方案 > 使用 Apache MINA 实现 JGIT TransportConfigCallback

问题描述

JGit 过去依赖 JSch 作为其传输提供者,但由于 JSch 不接受某些密钥(包括一些 OpenSSH 密钥)而发生了变化。

如果您在 JGit 中使用密码短语加密的密钥,那么过去推荐的 JSch 方法是覆盖配置回调,如本博客文章所示

另一种方法是设置一个共享会话工厂,这也是 Apache MINA 团队建议的,它带有一个指向按需创建会话的成本的指针

但是,我对此的问题是它为整个系统范围设置了一个特定的提供程序。因此,我想实施TransportConfigCallback. 最终,这需要适应SshSessionFactoryMINA 的会话初始化代码并生成一个RemoteSession.

有没有人这样做或看过任何样板代码?

标签: configurationopensshjgitapache-mina

解决方案


经过一番研究后的自我回答:JGit中的MINA接口被故意设置为关闭。驱动程序只接受常规的 Git 配置目录。这是配置系统的关键:

  • 为每个用户提供不同的 git 配置目录。
  • 为所有特殊设置提供常规的 git 配置(git config)文件
  • JGit 具有编写 Git 配置的类,因此您无需编写任何解析和序列化代码。

我将使用指向所涉及的类和源代码位置的相关链接来更新此答案。

5.5 版开始,可以为此用例配置工厂。有关如何使用数据库提供连接信息的详细信息,请参阅NoFilesSshTest.java 。


推荐阅读