如何用maven-shade-plugin将jboss-sar类纳入SpringBoot类路径?
解决SpringBoot依赖jboss-sar包的ClassNotFound问题
1. 确认依赖配置
先确保POM中已正确引入jboss-sar依赖,显式指定type为sar:
<dependencies> <dependency> <groupId>你的sar包groupId</groupId> <artifactId>第一个sar包artifactId</artifactId> <version>版本号</version> <type>sar</type> </dependency> <dependency> <groupId>你的sar包groupId</groupId> <artifactId>第二个sar包artifactId</artifactId> <version>版本号</version> <type>sar</type> </dependency> </dependencies>
2. 配置maven-shade-plugin提取sar类
在build/plugins下添加shade插件,核心是通过配置将sar包内的class文件提取并合并到最终的SpringBoot可执行jar中:
<build> <plugins> <!-- SpringBoot打包插件,需与shade插件配合调整执行顺序 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> <phase>package</phase> </execution> </executions> </plugin> <!-- maven-shade-plugin 处理sar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <!-- 使用稳定版即可 --> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <!-- 保留SpringBoot主类入口 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>你的SpringBoot主类全路径</mainClass> </transformer> <!-- 合并Spring相关元数据,避免配置文件冲突 --> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> <!-- 指定要处理的sar依赖 --> <artifactSet> <includes> <include>你的sar包groupId:第一个sar包artifactId</include> <include>你的sar包groupId:第二个sar包artifactId</include> </includes> </artifactSet> <!-- 提取sar包中的class文件和必要元数据 --> <filters> <filter> <artifact>你的sar包groupId:第一个sar包artifactId</artifact> <includes> <include>**/*.class</include> <include>META-INF/**</include> </includes> </filter> <filter> <artifact>你的sar包groupId:第二个sar包artifactId</artifact> <includes> <include>**/*.class</include> <include>META-INF/**</include> </includes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build>
3. 修复IntelliJ代码标红问题
- 执行
mvn clean install后,点击IntelliJ右侧Maven面板的Reload All Maven Projects,让IDE重新识别依赖。 - 若仍标红,手动添加sar包为库:找到本地Maven仓库中的sar文件,右键选择
Add as Library并关联到当前模块。
4. 验证运行
执行mvn clean package生成可执行jar,再用java -jar target/你的SpringBoot应用jar名.jar启动,此时不会再出现ClassNotFound异常。
注意事项
- 确保shade插件版本与你的Maven版本兼容,推荐使用3.x以上版本。
- 若sar包存在重复类或资源,需在
filter中排除冲突文件,避免打包报错。 - 必须保证shade插件先执行,再由SpringBoot插件重新打包,否则会丢失sar包的类。
内容的提问来源于stack exchange,提问作者joploya
相关产品推荐
相关产品推荐

