0

gradle/OSGi ビルドを行っています。

OSGi バンドルのビルドは正常に行われていますが、バンドルの展開を自動化したいと考えています。これにはgradleタスクはないと思うので、これはグルーヴィーな質問になります。osgi コンテナーにデプロイするには、次のようにします。

  1. OSGi コンテナ ポートへの telnet
  2. send ss コマンドでバンドルを一覧表示
  3. 問題のバンドルを解析します
  4. 「uninstall [ID]」コマンドでバンドルをアンインストールします
  5. 「install file:///path to bundle」URL からバンドルをインストールします。
  6. 結果を解析する
  7. telnet セッションを終了します。

Groovy を使用してポートに telnet で接続し、コマンドを送信して出力を読み取る方法はありますか?

助けてくれてありがとう、フィル

4

2 に答える 2

1

telnet についてはわかりませんが、次のように AntBuilder と sshexec タスクを使用して Groovy と SSH を操作しました。

class SshClient {

    def host
    def username
    def password


    def execute (def command) {
        def ant = new AntBuilder()
        ant.sshexec(host : host,
                    username : username,
                    password : password,
                    command : command,
                    trust : "true",
                    outputproperty : "result")

        return ant.project.properties."result"
    }
}

def ssh = new SshClient ( host: "myhost",
                          username : "myuser",
                          password : "secret")

println ssh.execute("ls")

クラスパスに ant-jsch.jar および jsch-0.1.33.jar 以降が必要です。

于 2010-08-14T19:55:37.280 に答える
0

これは、通常のソケットとストリーム リーダー/ライターで簡単に実行できるはずです。Telnet は、テキスト ベースのプロトコルである単純なソケット I/O の単なるフロントエンドです。

したがって、手順を実行するには:

  • 宛先ホスト/ポートへの通常のソケットを作成します
  • 「ス」と書く
  • 入力ストリームリーダーを作成する
  • 利用可能なすべてを消費する
  • 解析してバンドル ID を見つけます
  • 「uninstall」+ bundleId を送信
  • コマンドプロンプトが到着するまでストリームを消費する/アンインストールが完了する
  • 「インストール ファイル://パス/」を送信します
  • コマンドプロンプトが到着するまでストリームを消費する/インストールが完了する
  • ソケット.close()

ええ、これはあなたがすでに書いた手順に似ていることは知っていますが、telnet は実際のプロトコルではなく、テキスト ソケットの単なるフロントエンドであるため、これは自分で簡単に実行できるはずです。

于 2010-08-16T08:46:13.930 に答える