Я разрабатываю приложение, которое должно вызывать некоторые экземпляры Jenkins, для этого я использую jenkins-cli .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);
Но теперь мне нужно как-то получить вывод, который jar печатает в System.out
Я знаю, что могу использовать System.setOut()
. Проблема в том, что у меня одновременно регистрируются другие потоки. Я прочитал здесь что System.out зависит от загрузчика классов, но я не смог найти никакой дополнительной информации об этом.
Кто-нибудь знает способ получить стандартный вывод jar без вмешательства других потоков?
System.out
определенно не зависит от загрузчика классов. Возможно, вы могли бы использоватьSystem.setOut
, чтобыPrintStream
был чувствителен к вызывающему абоненту, но по умолчанию он также не делает этого. - person Brett Kail   schedule 18.04.2017