两个项目:产品(项目-A)和A的汽车基准项目(项目-B)。
在 B 的构建文件中,我们需要调用 A 的构建文件来运行构建和 bundle-with-app-server 过程,如下所示:
<ant antfile="${build-file-A}" inheritall="false" target="all" />
而且,在项目 B 中,我们有很多使用 java.util.logging(JDK 日志框架)输出消息的 Ant 任务。
问题是,在那一行之后,所有 jdk 记录器输出都消失了。
通过调试,我发现在项目A的构建文件的初始化过程中,项目A中的一个静态定义的东西会运行LogManager.readConfiguration(InputStream)
,它会加载一个配置文件,其中只包含单个类的记录器配置。
期间readConfiguration
,LogManager.reset()
将被调用;在此期间reset
,每个记录器的每个处理程序都将被删除。由于<ant>
会将目标构建文件加载到调用者的同一进程中,因此所有处理程序都将被删除。
因此,除了已配置的类,其他所有使用 jdk 记录器的类都无法输出消息,因为缺少输出处理程序。
我的问题是:
有没有办法解决这个问题,除了:
- 用于
<exec>
运行项目 A 的构建文件; - 编写一个要运行的任务,以在调用
readConfiguration()
后从默认配置文件中恢复默认的 JDK 日志记录设置。<ant>
- 使用 ant 自己的日志框架(Task.log() 等)。
请注意,我无法修改项目 A 以防止出现问题。