2017-04-18 3 views
1

私はjenkins-cli .jarを使用しているいくつかのJenkinsインスタンスを呼び出す必要があるアプリケーションを開発しています
私は簡単にコマンドラインを使用してjarファイルを呼び出すことができますその出力。しかし、私は自分自身で例外を解析する必要があります。独立したクラスパス用のJava分離System.out

URLClassLoader jenkinsClassloader = new URLClassLoader(new URL[]{"UrlToJenkins-Cli.jar"}, getClass().getClassLoader()); 
Class<?> jenkinsCli = Class.forName ("hudson.cli.CLI", false, jenkinsClassloader); 
Method mainMethod = jenkinsCli.getDeclaredMethod("main", String[].class); 
mainMethod.invoke (null, (Object) commandArray); 

しかし、今私は私が使用することができます知って何とかのSystem.out
に出力ジャープリントを取得する必要がありSystem.setOut():適切に私は今、リフレクション経由で瓶のmainメソッドを呼び出しています例外を処理する
。そこに問題があるのは、私は他のスレッドが同時に覚えているということです。 私はhereを読んでいますが、System.outはクラスローダー固有のものですが、これに関する追加情報は見つかりませんでした。
誰かが他のスレッドから妨害されることなく、瓶の標準出力を得る方法を知っていますか?

+1

それ以外の答えは間違っています: 'System.out'は、明らかにクラスローダ固有ではありません。おそらく 'System.setOut'を使って' PrintStream'が呼び出し側を敏感にしているかもしれませんが、デフォルトではそうしません。 –

+0

ああ、私は簡単な解決策があることを願っています。物事をクリアしていただきありがとうございます – ElectronicManuel

答えて

1

可能性は、単にSystem.setOut()を経由して、周りのSystem.outことをラップし、その後、別のPrintStreamに渡されるものは何でも渡すPrintStreamを拡張するカスタムクラスを作成することですワン。カスタムクラスはThreadLocalプライベート属性を持つことができます。プライベート属性は、現在のスレッドでテキストを傍受する必要がある場合に通知するために使用できます。

解決策の中で最もエレガントではありませんが、代替手段が見つからない場合は良い代替手段になる可能性があります。

関連する問題