gpt4 book ai didi

java - 与 Java 模块 (JPMS) 和 Gradle 一起使用时出现 log4j2 配置问题

转载 作者:行者123 更新时间:2023-12-03 05:03:31 26 4
gpt4 key购买 nike

我使用 gradle 创建了一个 vanilla java 项目,然后将该项目转换为使用 java 模块。没有模块,log4j2.xml那存在于项目的根目录中。
但是一旦我将应用程序转换为基于模块的系统,而不是选择我的 log4j2.xml,框架就会使用它自己的默认配置。
据我了解,在 Java 平台模块系统 (JPMS) [当我们尝试使用 Module#getResourceAsStream 访问资源时] ,不在与包匹配的路径下的资源(比如模块根目录下 /myfile.txt 中的根级资源)以及 /META-INF 中的资源模块根目录的文件夹将自动提供给调用者模块(如果我错了,请纠正我)。但我不确定 JPMS 在决定查找给定资源的模块时使用的方法(是全部吗?还是有其他机制?)。
就我而言,我都导出并打开了模块,只是为了检查是否是导致问题的原因。不幸的是,这不是原因
知道为什么会这样吗?
问题的来源可以在以下 github repo 中找到
https://github.com/thekalinga/log4j2-config-gradle-jpms-issue

最佳答案

我不能肯定地说,因为我还没有完全调查它,但我的猜测是,像大多数其他库一样,Log4j 2 2.x 并不完全支持 JPMS。使用 JPMS,每个模块都由其自己的 ClassLoader 管理。由于 Log4j 是一个自动模块,它将与所有其他自动模块组合在一起,但不会与“真正的”JPMS 模块组合在一起。这意味着当 Log4 尝试在“类路径”上定位 log4j2.xml 时,它只会找到位于其他自动模块中的文件,因为 Log4j 2 2.x 不支持在其他模块中定位文件。
如果您的应用程序被定义为 JPMS 模块(即带有 module-info.class 文件),那么 Log4j 将无法找到位于其中的配置文件。
Log4j 2 3.0 的开发已经进行了相当长的一段时间。它的目的一直是完全支持 JPMS,所以你应该期望它最终发布时会起作用,但是让像 Log4j 这样的库完全支持 JPMS 需要做很多工作。由于所有 Log4j 开发人员在空闲时间都支持它,因此找到足够的它来处理我们想要的一切可能是具有挑战性的

关于java - 与 Java 模块 (JPMS) 和 Gradle 一起使用时出现 log4j2 配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63697603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com