詹金斯Java独立系统。选择单独的类路径
我正在开发一个需要调用一些Jenkins实例的应用程序,为此我使用Jenkins cli。jar
我可以使用命令行调用jar来轻松提取其输出。然而,我需要自己解析异常
为了正确处理异常,我现在通过反射调用jar的主要方法:
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.setOut()
。问题是我有其他线程同时记录。
我读了那个系统。out是特定于类加载器的,但我找不到关于它的任何其他信息
有人知道如何在不受其他线程干扰的情况下获取jar的stdout吗
# 1 楼答案
一种可能是创建一个扩展^{} 的自定义类,该类只需将传递给它的任何内容传递给另一个} private属性,可以用来告诉它,对于当前线程,是否应该拦截文本
PrintStream
,然后通过System.setOut()
将其环绕System.out
;自定义类可以有一个^{这不是最优雅的解决方案,但如果找不到替代方案,这可能是一个很好的退路