推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

SpringBoot分离打包:将jar包与lib依赖、配置文件分开

   2023-08-07 网络整理佚名1630
核心提示:问题的根本是:有时候仅仅改动了一点点东西,却要发给现场替换包含所有依赖的jar包,这非常的笨重不方便。之前一直使用初始化建立项目默认的-boot-maven-插件,进行项目打包,这个插件会将项目所有的依赖打入BOOT-INF/lib下,这就导致了jar包的体积非常臃肿,尤其涉及到几十个子项目时,整个项目的体积可想而知。

文章目录

一、简介

昨天和项目组一位经验丰富的高手讨论,针对现场远程维护和部署非常不方便,且打包后很容易超过100兆的问题请教了。 问题的根源在于:有时候只改一点点东西,却必须把包含所有依赖的jar包发到现场去替换,非常麻烦、不方便。

所以我学到了一些新东西。 我花时间浏览了网上的资料,结合工作中的实际使用场景,整理了本文的内容,以便以后随时可以使用。

二、正文

我之前一直使用默认的-boot-maven-进行初始化来构建项目并打包项目。 这个插件会把项目的所有依赖都放到BOOT-INF/lib中,这就导致jar包非常臃肿,尤其是当子项目有几十个的时候,整个项目的体积可想而知。 然而,项目之间存在非常常见的依赖关系,因此分离包是有意义的。

本文还是在前两个项目上进行测试。 毕竟只是改变了pom文件中build标签下的插件内容。

有兴趣的可以阅读:集成新版本-Plus代码生成器,集成替换。

1.整个项目的目录结构

2.系统环境变量配置

3.pom文件配置——本文的重点,其他部分根本不用看

pom中几乎所有的配置项都有详细的注释,说明每个属性的作用以及如何配置。 请根据实际项目进行配置。

   <properties>
        
        <output.dependence.file.path>lib/output.dependence.file.path>
        
        <output.jar.file.path>bin/output.jar.file.path>
        
        <output.resource.file.path>config/output.resource.file.path>
    properties>

啰嗦了,在下面的配置中,你会看到有一个.../的相对路径配置,其实很简单,只要抓住一点,一切都是从最终的jar包开始的,考虑如何为了使它找到依赖于文件的库和配置。

<build>
        <plugins>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-jar-pluginartifactId>
                <configuration>
                    
                    <outputDirectory>${env.LEARN_HOME}/${output.jar.file.path}outputDirectory>
                    
                    <excludes>
                        <exclude>*.propertiesexclude>
                        <exclude>*.ymlexclude>
                        <exclude>*.xmlexclude>
                        <exclude>*.txtexclude>
                    excludes>
                    <archive>
                        
                        <addMavenDescriptor>trueaddMavenDescriptor>
                        
                        <manifest>
                            
                            <useUniqueVersions>falseuseUniqueVersions>
                            
                            <addClasspath>trueaddClasspath>
                            
                            
                            
                            <classpathPrefix>../${output.dependence.file.path}classpathPrefix>
                            
                            <mainClass>com.ieslab.knife4j.demo.DemoApplicationmainClass>
                        manifest>
                        <manifestEntries>
                            
                            
                            
                            <Class-Path>../${output.resource.file.path}Class-Path>
                        manifestEntries>
                    archive>
                configuration>
            plugin>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-dependency-pluginartifactId>
                <executions>
                    <execution>
                        <id>copy-dependenciesid>
                        <phase>packagephase>
                        <goals>
                            <goal>copy-dependenciesgoal>
                        goals>
                        <configuration>
                            
                            <outputDirectory>${env.LEARN_HOME}/${output.dependence.file.path}outputDirectory>
                            
                            <excludeTransitive>falseexcludeTransitive>
                            
                            <stripVersion>falsestripVersion>
                        configuration>
                    execution>
                executions>
            plugin>
            
            <plugin>
            	<groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-resources-pluginartifactId>
                <executions>
                    
                    <execution>
                        <id>copy-resourcesid>
                        <phase>packagephase>
                        <goals>
                            <goal>copy-resourcesgoal>
                        goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>src/main/resourcesdirectory>
                                    <includes>
                                    	
                                        <exclude>*.propertiesexclude>
                                        <exclude>*.ymlexclude>
                                        <exclude>*.xmlexclude>
                                        <exclude>*.txtexclude>
                                    includes>
                                resource>
                            resources>
                            
                            <outputDirectory>${env.LEARN_HOME}/${output.resource.file.path}outputDirectory>
                        configuration>
                    execution>
                executions>
            plugin>
        plugins>
    build>

4. 包装

首先,打包时点击右上角的闪电图标可以“跳过测试模式”。 然后双击执行clean和命令分别进行清理和打包。

打包成功:

打包完成后,我们去输出目录看一下:

5.测试,测试依赖前两篇文章构建的测试项,当然这个不重要

进入bin目录:地址栏输入cmd回车

启动项目:java -jar demo-1.0.0.jar

启动成功:

在浏览器中输入地址进行验证:

三、总结

这篇文章有很多关于分离和包装的内容。 如果你有兴趣,可以尝试一下。

当然,还有很多不足之处需要探讨。 比如所有的配置文件都输出到该目录下,如果项目很多怎么办? 是不是应该考虑到目录下,每个子项目都有一个独立的目录? 以及整个项目的公共配置如何处理? 不可能为每个项目维护一个公共配置信息。 如果修改需要修改很多地方,如何解决?

下次见。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON