• springboot jar thin


    springboot jar thin

    springboot 应用 jar 瘦身。springboot jar 太大。jar与依赖包分离。

    两种方法,第一种,spring-boot-thin-launcher,他将依赖包以maven仓库的形式放到repository目录。

    第二种,将依赖包以jar包的方式放到一个目录下,比如libs目录。

    spring-boot-thin-launcher#

    这种方式是将jar所以依赖的项,从本地中找(比如windows系统,c:/Users/keboom/.m2),如果没有通过pom文件中的指定的maven仓库下载到默认${user.home}/.m2文件夹。下载到的位置可以通过thin.root指定,可以看下文,或者下文中GitHub中的详细文档。

    springboot 依赖配置区别#

    https://www.cnblogs.com/niceboat/p/6230448.html

    注意自己项目用的是spring-boot-dependencies还是spring-boot-starter-parent

    如果是spring-boot-dependencies,那么需要写executions---goals---repackage

    如果是spring-boot-starter-parent,那么可以试试廖雪峰的来做廖雪峰springboot jar 瘦身

                <dependency>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-dependenciesartifactId>
                    <version>2.5.14version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
                
               <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                     
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackagegoal>
                            goals>
                        execution>
                    executions>
                plugin>
    

    用上面的maven打包,回获得一个几十甚至几百兆的包。这个包可以独立运行,因为依赖都打包的这个包里面了。

    我们用spring-boot-thin-layout

                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.springframework.boot.experimentalgroupId>
                            <artifactId>spring-boot-thin-layoutartifactId>
                            <version>1.0.30.RELEASEversion>
                        dependency>
                    dependencies>
                     
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackagegoal>
                            goals>
                        execution>
                    executions>
                plugin>
    

    我用的windows,maven 本地仓库放到d盘了,而且我的pom里面也没配中央仓库这些,我用的命令为:

    java -Dthin.root=. -Dmaven.repo.local=D:\baseTool\mavenRepository -jar myapp.jar

    thin.root会将依赖放到myapp.jar 同级目录repository中,maven.repo.local指定从本地maven位置

    image-20230810174424803

    那么打包下来我是只有一百kb。

    spring-boot-thin-launcher Github里面介绍了原理,和相关参数的作用。

    将依赖的jar包copy到目录#

    第二种方式是,将依赖的jar包都放到一个文件夹下。

    将spring-boot-maven-plugin插件删掉

    添加一下两个插件

                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-dependency-pluginartifactId>
                    <executions>
                        <execution>
                            <id>copy-dependenciesid>
                            <phase>prepare-packagephase>
                            <goals>
                                <goal>copy-dependenciesgoal>
                            goals>
                            <configuration>
                                <outputDirectory>
                                    ${project.build.directory}/libs
                                outputDirectory>
                            configuration>
                        execution>
                    executions>
                plugin>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-jar-pluginartifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>trueaddClasspath>
                                <classpathPrefix>libs/classpathPrefix>
                                <mainClass>
                                    com.example.MyAppApplication
                                mainClass>
                            manifest>
                        archive>
                    configuration>
                plugin>
    

    然后进行 mvn clean install,或者用idea的界面去点就好。

    image-20230811143026221

    image-20230811143147276

    这样程序运行后会去libs目录找相应的依赖包。

    两者区别#

    第一种在能够连接到公司maven仓库时可以使用。但有些项目是部署到客户私有云的,通过给客户升级包的方式升级应用,那么使用第二种方式就更好用,只需要替换相应的jar文件即可。

  • 相关阅读:
    PHP SimpleXML
    C++注定要失败吗?
    Kconfig 和 Kbuild
    Ant Design Vue
    JavaScript 2.0
    jQuery UI简单的讲解
    Spring面试题22:Spring支持哪些ORM框架?优缺点分别是什么?Spring可以通过哪些方式访问Hibernate?
    解决Kibana(OpenSearch)某些字段无法搜索问题
    MySQL---单行函数
    备战数学建模34-BP神经网络预测2
  • 原文地址:https://www.cnblogs.com/keboom/p/17622964.html