首页 > 其他分享 >springboot jar thin

springboot jar thin

时间:2023-08-11 14:55:48浏览次数:50  
标签:springboot jar boot maven thin spring

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.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.5.14</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            
           <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                 <!--如果用的是 spring-boot-dependencies ,那么需要配置 repackage -->
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

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

我们用spring-boot-thin-layout

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework.boot.experimental</groupId>
                        <artifactId>spring-boot-thin-layout</artifactId>
                        <version>1.0.30.RELEASE</version>
                    </dependency>
                </dependencies>
                 <!--如果用的是 spring-boot-dependencies ,那么需要配置 repackage -->
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </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.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/libs
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>libs/</classpathPrefix>
                            <mainClass>
                                com.example.MyAppApplication
                            </mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

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

image-20230811143026221

image-20230811143147276

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

两者区别

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

标签:springboot,jar,boot,maven,thin,spring
From: https://www.cnblogs.com/keboom/p/17622964.html

相关文章

  • Springboot跨域问题,options请求
    ......
  • SpringBoot打包war部署到tomcat
    项目结构:pom.xml:<!--①指定打包成war--><packaging>war</packaging><dependencies><!--starter-web:spring-webmvc+autoconfigure+logback+yaml+tomcat--><dependency><groupId>org.springframework.b......
  • Windows环境下重启jar服务bat代码
    问题:在Windows环境下部署java的jar包,若有多个服务同时启动,很难找到相应服务重启。每次都重启全部服务很麻烦。应用场景大多用于部署测试。适用:jar部署,war部署不适用。解决方案:找到相应jar服务关闭并重启。注意:1、正确设置端口,jar服务运行的端口;2、正确设置jar文件地址@echo......
  • 基于Springboot的短视频网站设计
    随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,短视频管理当然也不能排除在外。短视频网站是以实际运用为开发背景,运用软件工程开发方法,采用SPRINGBOOT+VUE.JS技术构建的一个管理系统。整个开发过程首先对软件系统进行......
  • jmeter--导入jar包
    1、问题:写jmeter脚本时,用到了beanshell断言这个元件,其中在元件的script中使用了org.json包中的方法,即将响应数据转换成json格式来提取数据的部分字段的值进行断言。但执行脚本时报错Typedvariabledeclaration:Class:JSONObjectnotfoundinnamespace. 2、原因:jmeter本身......
  • Drools 7.67.0 + DMN 1.2 + SpringBoot3 构建规则引擎
    背景:基于项目工作的需要,要建立一个规则引擎的应用集中式的管理业务中的规则流程等,所以先探索一个MVP1.什么是规则引擎,同类竟品?规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模板编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。需......
  • SpringBoot系列---【SpringBoot在多个profiles环境中自由切换】
    SpringBoot在多个profiles环境中自由切换1.在resource目录下新建dev,prod两个目录,并分别把dev环境的配置文件和prod环境的配置文件放到对应目录下,可以在配置文件中指定激活的配置文件,也可以默认不指定。2.在pom.xml中最后位置,新增下面两部分配置<project><build>......
  • Springboot 3.x 使用PageHelper实现MyBatis分页查询
    开发环境SpringBoot3.0.1Maven工程JDKOpenJdk17.0.6引入pom依赖<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version></depende......
  • Springboot 测试@Test 工具
    别再用main方法测试了,太Low!这才是专业的SpringBoot项目测试方法!(qq.com)......
  • springboot quartz 定时任务
    定时任务实现方式quartz定时调用http请求quertz定时调用openfeginquartz定时调用普通定时任务springboot集成quartzpom.xml添加配置<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId>......