有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

詹金斯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) 个答案

  1. # 1 楼答案

    一种可能是创建一个扩展^{}的自定义类,该类只需将传递给它的任何内容传递给另一个PrintStream,然后通过System.setOut()将其环绕System.out;自定义类可以有一个^{}private属性,可以用来告诉它,对于当前线程,是否应该拦截文本

    这不是最优雅的解决方案,但如果找不到替代方案,这可能是一个很好的退路