SpringBoot jar包瘦身由蘑,從jar包中分離出依賴包lib和資源文件,方便對(duì)線上資源進(jìn)行維護(hù)
一部凑、配置pom文件進(jìn)行jar包瘦身
1、排除SpringBoot jar包中的其他依賴包
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<!-- jar中不包含其他依賴包-->
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
2、拷貝其他依賴到指定目錄
<!--拷貝依賴到j(luò)ar外面的lib目錄-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependency</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--輸出目錄-->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
3例驹、拷貝資源文件到指定目錄
<!-- 拷貝資源文件 到指定的resource目錄-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- 資源文件輸出目錄 -->
<outputDirectory>${project.build.directory}/resources</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<!--包含的文件-->
<includes>
<include>*/**</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
4、jar包指定資源和依賴包的路徑并從Springboot jar包中排除原有資源
<!--指定配置文件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<!-- 生成的jar中退唠,不要包含pom.xml和pom.properties這兩個(gè)文件 -->
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<!-- 是否要把第三方j(luò)ar加入到類構(gòu)建路徑 -->
<addClasspath>true</addClasspath>
<!-- 外部依賴jar包的最終位置 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- 配置項(xiàng)目啟動(dòng)類 -->
<mainClass>com.example.model.one.ModeloneApplication</mainClass>
</manifest>
<!-- 指定配置文件的新目錄-->
<manifestEntries>
<Class-Path>resources/</Class-Path>
</manifestEntries>
</archive>
<excludes>
<!--以target/classes為根目錄-->
<!--資源文件排除-->
<exclude>/*.*</exclude>
<!--html頁面排除-->
<exclude>/templates/</exclude>
<!--靜態(tài)文件排除-->
<exclude>/static/</exclude>
</excludes>
</configuration>
</plugin>
至此Springboot jar包瘦身配置完成
二鹃锈、mvn打包查看瘦身結(jié)果
1、target目錄
生成了lib和resource文件
image-20210528153717855.png
2瞧预、jar包中
生成的jar包中排除了lib和資源文件
image-20210524145944087.png
3屎债、執(zhí)行jar查看
在jar包所在目錄執(zhí)行
> java -jar .\model-one.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.4.RELEASE)
===
===
可正常運(yùn)行
三、Dockerfile編寫和Docker打包
1垢油、Dockerfile文件
FROM openjdk:8-jdk-alpine
#指定時(shí)區(qū)
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo Asia/Shanghai > /etc/timezone
ARG JAR_FILE
ARG OUT_DIRECTORY
#復(fù)制依賴jar
COPY ${OUT_DIRECTORY}/lib /home/project/lib/
#復(fù)制配置文件
COPY ${OUT_DIRECTORY}/resources /home/project/resources/
#復(fù)制項(xiàng)目jar
COPY ${JAR_FILE} /home/project/model-one.jar
#聲明使用的端口盆驹,需要-p去綁定宿主機(jī)否則將隨機(jī)綁定
EXPOSE 8081
ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar /home/project/model-one.jar"]
2、docker插件配置
<!--docker 插件-->
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.35.0</version>
<configuration>
<!-- Docker 遠(yuǎn)程管理地址-->
<dockerHost>tcp://127.0.0.1:2375</dockerHost>
<!--私服地址不使用可以不配置-->
<!--<registry>私服地址</registry>-->
<images>
<image>
<!--命名空間/倉庫名稱:鏡像版本號(hào)-->
<name>${project.artifactId}:${project.version}</name>
<build>
<args>
<!--為Dockerfile中提供參數(shù)-->
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
<OUT_DIRECTORY>target</OUT_DIRECTORY>
</args>
<!--dockerFile位置-->
<dockerFileDir>${project.basedir}</dockerFileDir>
</build>
</image>
</images>
</configuration>
</plugin>
3秸苗、docker 打包
1召娜、執(zhí)行docker build打包
image-20210524152419272.png
2、target目錄生成docker tar包
image-20210524160734702.png
3惊楼、docker遠(yuǎn)程服務(wù)中出現(xiàn)該鏡像
image-20210524160821955.png