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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:40:05