如何从依赖Jar获取logback.xml并通过maven-war-plugin过滤
解决方案:复用logback.xml并自动替换artifactId的简便方法
核心痛点
你当前的方案需要每个项目重复配置插件,效率偏低,最简便的解决思路是通过Maven父POM统一管理配置避免重复代码;也可以借助Logback自身特性绕开Maven文件过滤步骤。
方法一:父POM统一配置(推荐)
将插件配置抽离到公共父POM中,所有Web项目直接继承该父POM即可,无需每个项目重复编写配置:
- 创建父POM(例如
our.group.id:parent-web),把插件配置写入父POM的<build><plugins>节点:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>${maven-dependency-plugin.version}</version> <executions> <execution> <id>unpack-logback</id> <phase>process-resources</phase> <!-- 调整到资源处理阶段,更符合Maven构建流程 --> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>our.group.id</groupId> <artifactId>logging-setup</artifactId> <version>${logging-setup.version}</version> <type>jar</type> <overWrite>true</overWrite> <outputDirectory>${project.build.directory}/filtered-resources</outputDirectory> <!-- 解压到target目录,不污染源码 --> <includes>**/logback.xml</includes> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <webResources> <resource> <directory>${project.build.directory}/filtered-resources</directory> <filtering>true</filtering> <targetPath>WEB-INF/classes</targetPath> <includes> <include>logback.xml</include> </includes> </resource> </webResources> <packagingExcludes>WEB-INF/lib/logging-setup-*.jar</packagingExcludes> </configuration> </plugin> </plugins> </build>
- 每个Web项目的POM只需继承父POM,并引入
logging-setup依赖:
<parent> <groupId>our.group.id</groupId> <artifactId>parent-web</artifactId> <version>1.0.0</version> </parent> <dependencies> <dependency> <groupId>our.group.id</groupId> <artifactId>logging-setup</artifactId> </dependency> </dependencies>
优化说明:
- 将解压目录从源码目录改为
target/filtered-resources,避免修改源码,符合Maven构建规范 - 调整插件执行阶段为
process-resources,和资源处理流程对齐
方法二:Logback直接读取Maven属性(无需文件过滤)
不需要Maven过滤文件,让Logback自动读取Maven打包时生成的pom.properties文件(该文件位于META-INF/maven/${groupId}/${artifactId}/pom.properties,内置artifactId属性)。
- 修改通用logback.xml的属性配置:
<property name="LOG_FILE_NAME" value="${pom.artifactId}"/>
- 在
logging-setup依赖中添加Logback的Maven扩展:
<dependency> <groupId>ch.qos.logback.ext</groupId> <artifactId>logback-ext-maven</artifactId> <version>0.1.5</version> </dependency>
这样每个Web项目只需引入logging-setup依赖,无需任何插件配置,Logback会自动读取当前项目的artifactId。
内容的提问来源于stack exchange,提问作者ceepan
相关产品推荐
相关产品推荐

