You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从依赖Jar获取logback.xml并通过maven-war-plugin过滤

解决方案:复用logback.xml并自动替换artifactId的简便方法

核心痛点

你当前的方案需要每个项目重复配置插件,效率偏低,最简便的解决思路是通过Maven父POM统一管理配置避免重复代码;也可以借助Logback自身特性绕开Maven文件过滤步骤。


方法一:父POM统一配置(推荐)

将插件配置抽离到公共父POM中,所有Web项目直接继承该父POM即可,无需每个项目重复编写配置:

  1. 创建父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>
  1. 每个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属性)。

  1. 修改通用logback.xml的属性配置:
<property name="LOG_FILE_NAME" value="${pom.artifactId}"/>
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:03:23