在Maven pom文件中如何排除bcprov-jdk15on依赖中除JcaJceHelper外的所有类?
Maven 仅引入 bcprov-jdk15on 1.47 中的 JcaJceHelper 类配置方案
首先得明确:Maven的<excludes>标签是用来排除传递依赖的(也就是该依赖带进来的其他第三方jar),没法直接过滤bcprov-jdk15on自身jar包里的类。要只保留JcaJceHelper类,有两种可行方案:
方案一:用Maven Shade插件裁剪Jar包
Shade插件可以在打包时只保留你需要的类,剔除其他无关类。在项目的pom.xml里添加如下配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <artifactSet> <includes> <include>org.bouncycastle:bcprov-jdk15on:1.47</include> </includes> </artifactSet> <filters> <filter> <artifact>org.bouncycastle:bcprov-jdk15on:1.47</artifact> <includes> <!-- 只保留JcaJceHelper类,注意包路径要准确 --> <include>org/bouncycastle/jce/provider/JcaJceHelper.class</include> <!-- 注意:如果JcaJceHelper依赖其他类,也要把这些依赖类加进来,不然运行会报ClassNotFound --> <!-- 比如它可能依赖org.bouncycastle.jce.provider.JCEHelper,根据实际情况补充 --> </includes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build>
执行mvn package后,生成的jar包就只会包含你指定的类和它们的依赖类(如果补充了的话)。
方案二:手动提取类并打包小Jar
- 下载bcprov-jdk15on-1.47.jar,用解压工具打开
- 找到
org/bouncycastle/jce/provider/JcaJceHelper.class,以及它依赖的所有相关类(可通过IDE依赖分析或运行时报错确认) - 把这些class文件按原包路径整理好,用jar命令打成新的小jar
- 在pom.xml里把这个小jar作为本地依赖引入:
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on-minimal</artifactId> <version>1.47</version> <scope>system</scope> <systemPath>${project.basedir}/lib/bcprov-jdk15on-minimal-1.47.jar</systemPath> </dependency>
这种方式适合临时场景,工程化推荐用方案一。
内容的提问来源于stack exchange,提问作者Sun Shine
相关产品推荐
相关产品推荐

