使用maven war包打包去除jar包瘦身

 更新时间:2021年07月23日 11:50:54   作者:傻不拉几猫  
这篇文章主要介绍了使用maven war包打包去除jar包瘦身操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1、pom文件配置

1.1 添加maven-dependency-plugin插件用于将引用的jar包拷贝到指定的路径

便于后续tomcat启动指定依赖包路径

<!--拷贝依赖到jar外面的lib目录-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>                <!--指定的依赖路径-->
                <outputDirectory>
                    ${project.build.directory}/lib
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

使用这个插件构建完之后的目录结构多了一个lib目录(即上述配置的outputDirectory指定的路径),里面是依赖的jar包:

1.2 添加maven-war-plugin插件

<!-- war包 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <packagingExcludes>
            <!--排除具体jar包-->
            <!--WEB-INF/lib/commons-io-2.5.jar,-->
            <!--WEB-INF/lib/commons-lang3-3.6.jar,-->
            <!--排除不是以commons-开头的所有jar包-->
            <!--%regex[WEB-INF/lib/(?!commons-).*.*.jar]-->
            <!--排除以commons-开头的所有jar包-->
            %regex[WEB-INF/lib/(commons-).*.*.jar]
        </packagingExcludes>
    </configuration>
</plugin>

上述构建配置后打出的war包就会去除掉除war包里/WEB-INF/lib/下面相应的jar包,使得发布包大小变小,加快上传服务器速度,如下图,加压war包,查看WEB-INF/lib目录,没有包含commons开头的jar包,说明已经去除掉了:

原先war包里的结构是包含很多commons开头的jar,如下图:

按照上述思路我们就可以将lib下的所有jar都去掉,去掉依赖jar以后就可以通过配置tomcat引用外部lib路径来部署项目了

附注:

若存在不同版本依赖:比如项目A依赖Y库的1.0版本,项目B依赖Y库的2.0版本,那么可能会出现版本依赖冲突(两个版本不兼容的情况下)

解决方案:

1、能做到版本一致就保持使用同一个版本,尽可能保证多个项目使用同一个库的版本一致

2、让项目各自依赖所需的版本并打进war包中,把其他同版本的jar包放在同一个共享包下

测试发现依赖在查找时从上往下找,匹配到就用第一个

如下图会使用comm-0.0.1.jar版本的

springboot 打包插件去除jar包瘦身

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot+dynamicDataSource动态添加切换数据源方式

    springboot+dynamicDataSource动态添加切换数据源方式

    这篇文章主要介绍了springboot+dynamicDataSource动态添加切换数据源方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • SpringBoot使用Jasypt对配置文件和数据库密码加密

    SpringBoot使用Jasypt对配置文件和数据库密码加密

    在做数据库敏感信息保护时,应加密存储,本文就来介绍一下SpringBoot使用Jasypt对配置文件和数据库密码加密,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Java实现Token登录验证的项目实践

    Java实现Token登录验证的项目实践

    本文主要介绍了Java实现Token登录验证的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 关于Java中的IO流总结(推荐)

    关于Java中的IO流总结(推荐)

    下面小编就为大家带来一篇关于Java中的IO流总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 用Java设计模式中的观察者模式开发微信公众号的例子

    用Java设计模式中的观察者模式开发微信公众号的例子

    这篇文章主要介绍了用Java设计模式中的观察者模式开发微信公众号的例子,这里Java的微信SDK等部分便不再详述,只注重关键部分和开发过程中观察者模式优点的体现,需要的朋友可以参考下
    2016-02-02
  • Java扩展Nginx之共享内存

    Java扩展Nginx之共享内存

    这篇文章主要介绍了Java扩展Nginx之共享内存的相关资料,需要的朋友可以参考下
    2023-07-07
  • 深入理解spring的AOP机制原理

    深入理解spring的AOP机制原理

    本篇文章主要介绍了深入理解spring的AOP机制原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • mybatis多数据源动态切换的完整步骤

    mybatis多数据源动态切换的完整步骤

    这篇文章主要给大家介绍了关于mybatis多数据源动态切换的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 聊聊Java的switch为什么不支持long

    聊聊Java的switch为什么不支持long

    这篇文章主要介绍了Java的switch为什么不支持long,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • java算法题解LeetCode35复杂链表的复制实例

    java算法题解LeetCode35复杂链表的复制实例

    这篇文章主要为大家介绍了java算法题解LeetCode35复杂链表的复制实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论