首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SpringBoot打包资源文件

SpringBoot打包资源文件

原创
作者头像
ruochen
发布2021-12-16 22:16:07
发布2021-12-16 22:16:07
2.5K0
举报

一、配置pom文件进行jar包瘦身

1、排除SpringBoot jar包中的其他依赖包
代码语言:txt
复制
<plugin>
代码语言:txt
复制
    <groupId>org.springframework.boot</groupId>
代码语言:txt
复制
    <artifactId>spring-boot-maven-plugin</artifactId>
代码语言:txt
复制
    <configuration>
代码语言:txt
复制
         <layout>ZIP</layout>
代码语言:txt
复制
         <includes>
代码语言:txt
复制
             <!-- jar中不包含其他依赖包-->
代码语言:txt
复制
             <include>
代码语言:txt
复制
                 <groupId>nothing</groupId>
代码语言:txt
复制
                 <artifactId>nothing</artifactId>
代码语言:txt
复制
             </include>
代码语言:txt
复制
         </includes>
代码语言:txt
复制
     </configuration>
代码语言:txt
复制
</plugin>
2、拷贝其他依赖到指定目录
代码语言:txt
复制
<!--拷贝依赖到jar外面的lib目录-->
代码语言:txt
复制
<plugin>
代码语言:txt
复制
    <groupId>org.apache.maven.plugins</groupId>
代码语言:txt
复制
    <artifactId>maven-dependency-plugin</artifactId>
代码语言:txt
复制
    <executions>
代码语言:txt
复制
        <execution>
代码语言:txt
复制
            <id>copy-dependency</id>
代码语言:txt
复制
            <phase>package</phase>
代码语言:txt
复制
            <goals>
代码语言:txt
复制
                <goal>copy-dependencies</goal>
代码语言:txt
复制
            </goals>
代码语言:txt
复制
            <configuration>
代码语言:txt
复制
               <!--输出目录-->
代码语言:txt
复制
               <outputDirectory>${project.build.directory}/lib</outputDirectory>
代码语言:txt
复制
               <excludeTransitive>false</excludeTransitive>
代码语言:txt
复制
               <stripVersion>false</stripVersion>
代码语言:txt
复制
            </configuration>
代码语言:txt
复制
        </execution>
代码语言:txt
复制
    </executions>
代码语言:txt
复制
</plugin>
3、拷贝资源文件到指定目录
代码语言:txt
复制
<!-- 拷贝资源文件 到指定的resource目录-->
代码语言:txt
复制
<plugin>
代码语言:txt
复制
    <artifactId>maven-resources-plugin</artifactId>
代码语言:txt
复制
    <executions>
代码语言:txt
复制
        <execution>
代码语言:txt
复制
            <id>copy-dependencies</id>
代码语言:txt
复制
            <phase>package</phase>
代码语言:txt
复制
            <goals>
代码语言:txt
复制
                <goal>copy-resources</goal>
代码语言:txt
复制
            </goals>
代码语言:txt
复制
            <configuration>
代码语言:txt
复制
                <!-- 资源文件输出目录 -->
代码语言:txt
复制
               <outputDirectory>${project.build.directory}/resources</outputDirectory>
代码语言:txt
复制
                <resources>
代码语言:txt
复制
                    <resource>
代码语言:txt
复制
                        <directory>src/main/resources</directory>
代码语言:txt
复制
                        <filtering>true</filtering>
代码语言:txt
复制
                        <!--包含的文件-->
代码语言:txt
复制
                        <includes>
代码语言:txt
复制
                            <include>*/**</include>
代码语言:txt
复制
                        </includes>
代码语言:txt
复制
                    </resource>
代码语言:txt
复制
                </resources>
代码语言:txt
复制
            </configuration>
代码语言:txt
复制
        </execution>
代码语言:txt
复制
    </executions>
代码语言:txt
复制
</plugin>
4、jar包指定资源和依赖包的路径并从Springboot jar包中排除原有资源
代码语言:txt
复制
<!--指定配置文件-->
代码语言:txt
复制
<plugin>
代码语言:txt
复制
    <groupId>org.apache.maven.plugins</groupId>
代码语言:txt
复制
    <artifactId>maven-jar-plugin</artifactId>
代码语言:txt
复制
    <configuration>
代码语言:txt
复制
        <archive>
代码语言:txt
复制
            <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
代码语言:txt
复制
            <addMavenDescriptor>false</addMavenDescriptor>
代码语言:txt
复制
            <manifest>
代码语言:txt
复制
                <!-- 是否要把第三方jar加入到类构建路径 -->
代码语言:txt
复制
                <addClasspath>true</addClasspath>
代码语言:txt
复制
                <!-- 外部依赖jar包的最终位置 -->
代码语言:txt
复制
                <classpathPrefix>lib/</classpathPrefix>
代码语言:txt
复制
                <!-- 配置项目启动类 -->
代码语言:txt
复制
                <mainClass>com.example.model.one.ModeloneApplication</mainClass>
代码语言:txt
复制
            </manifest>
代码语言:txt
复制
            <!-- 指定配置文件的新目录-->
代码语言:txt
复制
            <manifestEntries>
代码语言:txt
复制
                <Class-Path>resources/</Class-Path>
代码语言:txt
复制
            </manifestEntries>
代码语言:txt
复制
        </archive>
代码语言:txt
复制
        <excludes>
代码语言:txt
复制
            <!--以target/classes为根目录-->
代码语言:txt
复制
            <!--资源文件排除-->
代码语言:txt
复制
            <exclude>/*.*</exclude>
代码语言:txt
复制
            <!--html页面排除-->
代码语言:txt
复制
            <exclude>/templates/</exclude>
代码语言:txt
复制
            <!--静态文件排除-->
代码语言:txt
复制
            <exclude>/static/</exclude>
代码语言:txt
复制
        </excludes>
代码语言:txt
复制
    </configuration>
代码语言:txt
复制
</plugin>

至此Springboot jar包瘦身配置完成

二、mvn打包查看瘦身结果

1、target目录

生成了lib和resource文件

image-20210528153717855.png

2、jar包中

生成的jar包中排除了lib和资源文件

image-20210524145944087.png

3、执行jar查看

在jar包所在目录执行

代码语言:txt
复制
> java -jar .\model-one.jar
代码语言:txt
复制
  .   ____          _            __ _ _
代码语言:txt
复制
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
代码语言:txt
复制
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
代码语言:txt
复制
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
代码语言:txt
复制
  '  |____| .__|_| |_|_| |_\__, | / / / /
代码语言:txt
复制
 =========|_|==============|___/=/_/_/_/
代码语言:txt
复制
 :: Spring Boot ::        (v2.3.4.RELEASE)
代码语言:txt
复制
 ===
代码语言:txt
复制
 ===

可正常运行

三、Dockerfile编写和Docker打包

1、Dockerfile文件
代码语言:txt
复制
FROM openjdk:8-jdk-alpine
代码语言:txt
复制
#指定时区
代码语言:txt
复制
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
代码语言:txt
复制
    && echo Asia/Shanghai > /etc/timezone
代码语言:txt
复制
ARG JAR_FILE
代码语言:txt
复制
ARG OUT_DIRECTORY
代码语言:txt
复制
#复制依赖jar
代码语言:txt
复制
COPY ${OUT_DIRECTORY}/lib /home/project/lib/
代码语言:txt
复制
#复制配置文件
代码语言:txt
复制
COPY ${OUT_DIRECTORY}/resources /home/project/resources/
代码语言:txt
复制
#复制项目jar
代码语言:txt
复制
COPY ${JAR_FILE} /home/project/model-one.jar
代码语言:txt
复制
#声明使用的端口,需要-p去绑定宿主机否则将随机绑定
代码语言:txt
复制
EXPOSE 8081
代码语言:txt
复制
ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar /home/project/model-one.jar"]
2、docker插件配置
代码语言:txt
复制
<!--docker 插件-->
代码语言:txt
复制
<plugin>
代码语言:txt
复制
    <groupId>io.fabric8</groupId>
代码语言:txt
复制
    <artifactId>docker-maven-plugin</artifactId>
代码语言:txt
复制
    <version>0.35.0</version>
代码语言:txt
复制
    <configuration>
代码语言:txt
复制
        <!-- Docker 远程管理地址-->
代码语言:txt
复制
        <dockerHost>tcp://127.0.0.1:2375</dockerHost>
代码语言:txt
复制
        <!--私服地址不使用可以不配置-->
代码语言:txt
复制
        <!--<registry>私服地址</registry>-->
代码语言:txt
复制
        <images>
代码语言:txt
复制
            <image>
代码语言:txt
复制
                <!--命名空间/仓库名称:镜像版本号-->
代码语言:txt
复制
                <name>${project.artifactId}:${project.version}</name>
代码语言:txt
复制
                <build>
代码语言:txt
复制
                    <args>
代码语言:txt
复制
                        <!--为Dockerfile中提供参数-->
代码语言:txt
复制
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
代码语言:txt
复制
                        <OUT_DIRECTORY>target</OUT_DIRECTORY>
代码语言:txt
复制
                    </args>
代码语言:txt
复制
                    <!--dockerFile位置-->
代码语言:txt
复制
                    <dockerFileDir>${project.basedir}</dockerFileDir>
代码语言:txt
复制
                </build>
代码语言:txt
复制
            </image>
代码语言:txt
复制
        </images>
代码语言:txt
复制
    </configuration>
代码语言:txt
复制
</plugin>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、配置pom文件进行jar包瘦身
    • 1、排除SpringBoot jar包中的其他依赖包
    • 2、拷贝其他依赖到指定目录
    • 3、拷贝资源文件到指定目录
    • 4、jar包指定资源和依赖包的路径并从Springboot jar包中排除原有资源
  • 二、mvn打包查看瘦身结果
  • 三、Dockerfile编写和Docker打包
    • 1、Dockerfile文件
    • 2、docker插件配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档