【发布时间】:2025-12-30 08:55:07
【问题描述】:
我有两个项目:
- 我制作了一个 Maven MOJO company:generation-plugin,它会生成一些代码。 Maven 阶段是generate-sources。
-
在一个客户端项目中,我使用的插件如下:
<plugin> <groupId>company</groupId> <artifactId>generation-plugin</artifactId> <version>1.0-SNAPSHOT</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin>
生成项目和客户端项目在src/main/resources中都有一个log4j.properties。
问题是在客户端项目中源的生成过程中,使用了生成项目的log4j.properties。
是否可以将客户端项目的log4j.properties注入到生成项目中,或者换句话说,将生成项目的log4j.properties替换为log4j.properties?
更新
当生成项目的log4j.properties被移动到src/test/resources或干脆删除时,客户端项目在构建过程中得到如下警告:
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
不知何故,我必须能够告诉生成项目使用来自客户端项目的 log4.properties。
【问题讨论】:
-
一种可能的解决方案是在插件的 src/main/resources 中不包含 log4j.properties。为什么你真的需要在 src/main/resources 中使用它?如果是为了测试目的,应该在 src/test/resources 里面
-
@Tunaki 我会更新我的问题。
-
您似乎没有使用standard Mojo way 来记录消息。有什么具体原因吗?
-
@Tunaki 我会检查一下。记录的不是 MOJO 本身,而是 FreeMarker 库在记录。该插件调用 FreeMarker 功能。
-
您的插件会将本地 src/main/resources 提取到其类路径中并因此找到 log4j.properties 是没有意义的。你对 log4j 初始化做了什么“有趣”的事情,比如将系统属性设置为“src/main/resource/log4j.properties”?你不应该。