【问题标题】:JGit throws ClassCastException in TransportConfigCallbackJGit 在 TransportConfigCallback 中抛出 ClassCastException
【发布时间】:2018-02-16 05:33:04
【问题描述】:

我正在尝试使用 JGit。我尝试关注http://www.codeaffine.com/2014/12/09/jgit-authentication/,下面的代码块抛出了ClassCastException

remoteRepository.setTransportConfigCallback(new TransportConfigCallback() {
    @Override
    public void configure(Transport transport) {
        SshTransport sshTransport = (SshTransport) transport;
        sshTransport.setSshSessionFactory(sshSessionFactory);
    }
});

例外:

java.lang.ClassCastException: org.eclipse.jgit.transport.TransportHttp 无法转换为 org.eclipse.jgit.transport.SshTransport

我错过了什么?我正在使用 JGit 版本 4.10.0.201712302008-r。

【问题讨论】:

  • 你能展示你的导入语句吗?您可能导入了错误的类

标签: classcastexception jgit


【解决方案1】:

该代码仅用于处理 SSH 连接。如果您通过其他协议进行连接,则需要调整代码以注意transport 可能与SshTransport 不同。

例如:

command.setTransportConfigCallback(new TransportConfigCallback() {
  @Override
  public void configure(Transport transport) {
    if(transport instanceof SshTransport) {
      SshTransport sshTransport = (SshTransport) transport;
      sshTransport.setSshSessionFactory(sshSessionFactory);
    } else if(transport instanceof HttpTransport) {
      // configure HTTP protocol specifics
    }
  }
} );

【讨论】:

  • 不确定为什么是 downvote ,但是相同的代码可以工作,我正在使用 ssh (ssh://git@ ...) 。它还涉及一些调试工作,我看到传输是作为 HttpTransport 来的(传输 instanceof HttpTransport 是真的)。​​
【解决方案2】:

当你设置:cloneCommand.setURI("ssh://user@example.com/repo.git"); 用 ssh 协议表示 url,github 中的 repo。 示例 - (ssh://git@github.com:githubtraining/hellogitworld.git)

参考这个https://github.com/allegro/axion-release-plugin/issues/101

【讨论】:

  • 谢谢,我没有足够的代表来支持你,但问题是我没有注意到我在测试用例中设置的是 http url 而不是 ssh
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 2013-04-13
  • 2017-10-10
相关资源
最近更新 更多