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

如何从依赖JAR中排除指定文件?Apache Shade插件尝试无效

解决从Maven依赖JAR中排除单个文件的问题

问题分析

你遇到的No artifact matching filter org.acme.idm:idm-browser提示,核心原因是Shade插件的过滤器没有匹配到目标依赖Artifact——大概率是因为坐标不完整(缺少版本号),或者依赖的Scope不在插件默认处理范围内。


解决方案一:修正Shade插件的Filter配置

你的依赖未指定版本号(可能通过父POM或dependencyManagement统一管理),需要在过滤器中补充版本通配符,确保插件能匹配到该依赖:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.3.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <!-- 用*匹配任意版本号,若知道具体版本可直接替换 -->
                        <artifact>org.acme.idm:idm-browser:*</artifact>
                        <excludes>
                            <exclude>real/form.ftl</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

如果目标依赖的Scope不是默认的compile(比如provided),需要在Shade配置中添加includeScope明确指定:

<configuration>
    <includeScope>provided</includeScope>
    <!-- 其他过滤器配置... -->
</configuration>

解决方案二:用maven-dependency-plugin手动处理依赖

如果Shade插件仍然不生效,可以通过解压依赖→排除文件→重新打包的方式实现:

1. 解压目标依赖并排除指定文件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.6.0</version>
    <executions>
        <execution>
            <id>unpack-target-dep</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>unpack</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>org.acme.idm</groupId>
                        <artifactId>idm-browser</artifactId>
                        <outputDirectory>${project.build.directory}/unpacked-dep</outputDirectory>
                        <excludes>real/form.ftl</excludes>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

2. 将处理后的文件加入打包产物

如果是JAR项目,配置maven-jar-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <classesDirectory>${project.build.directory}/unpacked-dep</classesDirectory>
        <!-- 保留项目自身的编译文件,需追加配置 -->
        <additionalResources>
            <additionalResource>
                <directory>${project.build.outputDirectory}</directory>
            </additionalResource>
        </additionalResources>
    </configuration>
</plugin>

如果是WAR项目,调整为maven-war-plugin配置,将解压后的文件加入WEB-INF/classes目录即可。


验证方法

执行mvn clean package后,打开生成的JAR/WAR文件,检查real/form.ftl是否已被排除。

内容的提问来源于stack exchange,提问作者user1472409

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:35:55