Java单独的系统



我正在开发一个需要调用一些jenkins实例的应用我可以使用命令行调用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);

,但是现在我需要以某种方式将jar打印到系统的输出
我知道我可以使用System.setOut()。那里的问题是我还有其他线程同时记录。我在这里读到System.out是Class Loader的特定于Class Loader,但我找不到有关此的其他信息。
有人知道一种方法可以在没有其他线程中干扰罐子的情况下获取罐子的阶段吗?

一种可能性是创建一个延伸PrintStream的自定义类,它只会将其传递给另一个PrintStream的任何内容,然后通过System.setOut()将其包裹在System.out周围;自定义类可以具有ThreadLocal私有属性,该属性可以用来告诉它,如果对于当前线程,则应截取文本。

不是最优雅的解决方案,但如果找不到其他选择,可能是一个很好的后备。

相关内容

最新更新