2016-05-16 12 views
2

JGitを使用してJavaプログラムにgit repo(リモートからのコミットと変更のコミット)の呼び出しをインクルードしようとしています。私はhttp://www.codeaffine.com/2014/12/09/jgit-authentication/の手順を踏んだが、Eclipseは私にいくつかのエラーを与える。デフォルト以外の場所にsshキーがあるJGit

pullコマンドのための私のコード(現在このようcloneコマンドでは、リンク先の記事からのコード例です):

public boolean updateData() { // git pull 
     SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() { 
      @Override 
      protected void configure(Host arg0, Session arg1) { 
       //do nothing 
      } 
     }; 
     CloneCommand cloneCommand = git.cloneRepository(); 
     cloneCommand.setURI(ssh_url); 
     cloneCommand.setTransportConfigCallback(new TransportConfigCallback() { 
      public void configure(Transport transport) { 
       SshTransport sshTransport = (SshTransport) transport; 
       sshTransport.setSshSessionFactory(sshSessionFactory); 
      } 
     }); 
     return true; 
} 

最初の「configureが」新しい「JSchConfigSessionFactory」を作成する際に必要であると考えられますしかし、私がこのようなコードを持っていても、Eclipseはそれを何度も何度も追加したいと考えています。 「セッション」のタイプエラーが発生しました。インポートする必要はありますか?

  • TransportConfigCallbackがタイプTransportCommandのメソッドsetTransportConfigCallback(TransportConfigCallbackは)新しい( 引数には適用されませんタイプ
  • に解決することはできません:「cloneCommand.setTransportConfigCallbackは」私は2つのエラーを取得するために TransportConfigCallbackさらに(){} "トランスポート" および "SshTransportは" タイプに解決することはできない。

sshキーのコードスニペットはどこに追加する必要がありますか(デフォルトディレクトリにはありません)。 ssh認証で「フェッチ」と「プッシュ」を使用する方法は?


アップデート2016年5月18日

「JSCH」をダウンロードしてビルド・パスに追加し、すべてのインポートエラーが解決されているように見えます。

しかし、 "git pull"と同じようにコマンドを実行するために私のsshキーを使用する方法はありますか? sshキーへのパスは、 "keyfile"というString変数に格納されます。

"log4j"出力を無効にする方法はありますか?さまざまな方法を試した後、次のコードは、現在動作しているよう

+0

「いくつかのエラー」とは、出力またはログの詳細なスタックトレースは何ですか? – centic

+0

最初の段落の最後に:)エラーは、クラスパスまたはこのアプリケーションを呼び出す方法に問題があることを示しています。必要なクラスがありません。 – centic

+0

私はあなたに従うことができないようです。アプリケーションには、 "readData rd = new readData();"を使用してクラス "readData"を参照するクラス "gui"(データを表示するJFrame)があります。この "readData"クラスの中で、私は "workWithGit wwg = new workWithGit()"を使って "workWithGit"クラスのコンストラクタを呼び出します。コンストラクタ自体がリポジトリ( "git")を準備し、これらのエラーを生成するメソッド "updateData()"を呼び出します。コンストラクタ内の "updateData()"の呼び出しを削除すると、すべて正常に動作します。 – epR8GaYuh

答えて

2

public boolean updateData() { // git pull 
    SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() { 
     @Override 
     protected void configure(Host host, Session session) { 
      session.setConfig("StrictHostKeyChecking", "no"); 
     } 
     @Override 
     protected JSch createDefaultJSch(FS fs) throws JSchException { 
      JSch defaultJSch = super.createDefaultJSch(fs); 
      defaultJSch.addIdentity(keyfile); 
      return defaultJSch; 
     } 
    }; 
    FetchCommand fetchCommand = git.fetch().setCheckFetchedObjects(true); 
    fetchCommand.setTransportConfigCallback(new TransportConfigCallback() { 
     public void configure(Transport transport) { 
      SshTransport sshTransport = (SshTransport) transport; 
      sshTransport.setSshSessionFactory(sshSessionFactory); 
     } 
    }); 
    try { 
     FetchResult result = fetchCommand.call(); 
     System.out.println("Messages: " + result.getMessages()); 
    } catch (GitAPIException e) { 
     return false; 
     //e.printStackTrace(); 
    } 
    return true; 
} 

は、log4jののログを無効にする方法がありますか?

型一覧メソッドAdd(java.util.logging.Loggerの)は引数に適用されない(org.apache.log4j:https://stackoverflow.com/a/6736961/5842254からのコードを使用して「追加」メソッドを使用してエラー・メッセージを生成します.Logger)

関連する問題