当前位置: 首页 > 知识库问答 >
问题:

Java单独的System.out为单独的Classpath

蓝侯林
2023-03-14

我正在开发一个需要调用一些Jenkins实例的应用程序,为此我使用jenkins-cli. jar
我可以使用命令行调用jar以轻松提取其输出。然而,我需要自己解析异常。
为了正确处理异常,我现在通过反射调用jar的main方法:

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打印的输出获取到系统中。我知道我可以使用这个系统。放样()。问题是,我有其他线程同时记录。我在这里读到了这个系统。out是特定于类加载器的,但我找不到关于它的任何其他信息<有人知道如何获取jar的标准输出而不受其他线程的干扰吗?

共有1个答案

鲁龙野
2023-03-14

一种可能是创建一个扩展PrintStream的自定义类,该类只需将传递给它的内容传递给另一个PrintStream,然后将其包装到系统中。通过系统输出。放样();自定义类可以有一个ThreadLocal私有属性,该属性可以用来告诉它,对于当前线程,是否应该截取文本。

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

 类似资料:
  • 问题内容: 将应用程序部署为EAR(具有1个EJB和1个WAR模块)与单独的模块有什么区别?我想使用GlassFish 3 Web配置文件,但它不支持EAR存档。我可以简单地将EJB和WAR用作单独的模块吗?还有其他选择吗? 问题答案: 3种部署变体之间似乎有些混淆: 包含EJB和WEB模块的EAR 部署单独的EJB模块和单独的WEB模块 部署包含EJB类或EJB jar的WEB模块。 在第一种情

  • 在我的应用程序中,我在menuitemclicked中添加了Observable方法,但当我点击它两次时,它仍然起作用。单次按压。方法不工作,但按钮工作良好,任何建议或方法中的任何更改。 fetch()中断; }

  • 我打算从一个Java项目中提取几个类和包,并将它们放入另一个项目中(该项目将有一个可分发的jar)。这并不太难,但当然,进行如此大规模的重构会带来一些后果。也就是说,在原始项目中有许多类是我想要提取的类的子类。实现这种重构的最佳方法是什么?

  • 问题内容: 我正在尝试编写一个正则表达式验证:1到99之间的一组(或多个)数字用|或分隔,(可以将两者组合) 例 必须接受: 必须拒绝: 对于数字组,其直截了当:[1-9][0-9]。对于其余部分,这仍然是个谜。 题 有人可以协助提出正确的正则表达式吗? 问题答案: 说明:

  •  说明 函数说明: 主要检测用户是否是可疑用户或恶意用户,并弹出验证框。支持yy,duowan,4366域。现防刷方式分为 验证码 与 端机器码 方式。 验证码 方式主要用于浏览器、盒子大厅、游戏大厅等环境。 活动配置选择防刷方式为:防刷组件(后台计算签名) 端机器码 方式以前主要用于砸蛋客户端,但新版砸蛋已改用 验证码 方式,所以 端机器码 方式就不做详解了。 验证码 方式 引用: <scri

  • 我有一个带有签名字节的数组和一个带有ocsp字节的数组,用于将ltv信息添加到我的pdf中。该签名是时间戳签名。现在,我尝试将这些信息添加到一个pdf文件中,该文件可用于 ... 好的,这样行。但在签名中,我必须设置标志认证级别1(不允许更改),我的应用程序将无法工作。因为添加LTV后,我更改了文档。我尝试创建自己的DSS字典并将其添加到文档中,但失败了。有谁能帮忙吗?提前谢谢