SpringBoot - 将项目代码与依赖分开打包教程(附样例)
默认情况下,Spring Boot 项目发布时会将项目代码和项目的所有依赖文件一起打成一个可执行的 jar 包。但如果项目的依赖包很多,那么这个文件就会非常大。这样每次即使只改动一点东西,就需要将整个项目重新打包部署,既浪费带宽也浪费时间,十分不便。下面演示如何将依赖 lib 从项目分离出来,这样每次部署只需要发布代码即可。
(2)我们将打包插件替换为 maven-jar-plugin,并拷贝依赖到 jar 到外面的 lib 目录。
(3)配置修改完毕后,我们重新对项目进行打包。可以发现除了项目 jar 包外(体积已变得十分小巧),还多了个 lib 文件夹:
(1)首先编辑项目的 pom.xml 文件,默认使用的是 spring-boot-maven-plugin 来打包,这个插件会将项目所有的依赖打入项目jar 包里面。
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins>
(2)我们将打包插件替换为 maven-jar-plugin,并拷贝依赖到 jar 到外面的 lib 目录。
<plugins> <!-- 指定启动类,将依赖打成外部jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 --> <addMavenDescriptor>false</addMavenDescriptor> <manifest> <!-- 是否要把第三方jar加入到类构建路径 --> <addClasspath>true</addClasspath> <!-- 外部依赖jar包的最终位置 --> <classpathPrefix>lib/</classpathPrefix> <!-- 项目启动类 --> <mainClass>com.example.hanggedemo.HanggeDemoApplication</mainClass> </manifest> </archive> </configuration> </plugin> <!--拷贝依赖到jar外面的lib目录--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-lib</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>target/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> <includeScope>runtime</includeScope> </configuration> </execution> </executions> </plugin> </plugins>
(3)配置修改完毕后,我们重新对项目进行打包。可以发现除了项目 jar 包外(体积已变得十分小巧),还多了个 lib 文件夹:
(4)lib 文件夹下里面则是所有依赖的 jar 包:
(5)部署时将项目 jar 包以及 lib 文件夹上传到服务器上,使用如下命令启动即可。如果后续仅仅修改了项目代码,只需上传替换项目 jar 包即可:
java -jar xxxx.jar