使用Maven Shade Plugin排除类无效问题求助
Maven Shade Plugin排除类未生效的解决方案
以下是几个可行的排查和解决方向:
过滤器未绑定目标依赖
当前配置里的<filter>没有指定要作用的依赖坐标,Shade插件无法确定从哪个依赖中排除类。需要给过滤器添加<artifact>(或<groupId>+<artifactId>)明确目标范围:如果要全局排除所有依赖中的对应类,用通配符*:*;如果是特定依赖,就写对应的坐标。修改后的配置示例:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.version}</version> </dependency> </dependencies> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <!-- 匹配所有依赖,可替换为具体groupId:artifactId --> <artifact>*:*</artifact> <excludes> <exclude>io/confluent/shaded/kafka/serializers/subject/**</exclude> </excludes> </filter> </filters> <mainClass>com.expediagroup.das.businessevent.CommerceBusinessBookingEventMetricCalculatorApp</mainClass> <layout>JAR</layout> </configuration> </execution> </executions> </plugin>注意:统一用
/分隔路径,**可匹配子目录下所有类,覆盖范围更彻底。验证类路径匹配准确性
先确认打包后的JAR里是否真的存在这些类,执行命令:jar tf target/your-project-jar-name.jar | grep io.confluent.shaded.kafka.serializers.subject根据输出调整排除路径,确保和实际类的路径完全一致。
适配Spring Boot打包结构
由于你依赖了spring-boot-maven-plugin,如果是构建Spring Boot可执行JAR,建议将<layout>改为SpringBoot,避免打包结构冲突:<layout>SpringBoot</layout>清理缓存后重新构建
执行mvn clean package,强制清理旧构建产物后重新打包,避免缓存导致配置不生效。
内容的提问来源于stack exchange,提问作者Akshay Hazari
相关产品推荐
相关产品推荐

