美文网首页
SpringBoot打包分离lib和资源文件并使用Dockerf

SpringBoot打包分离lib和资源文件并使用Dockerf

作者: chenzan | 来源:发表于2021-05-24 16:16 被阅读0次

    SpringBoot jar包瘦身,从jar包中分离出依赖包lib和资源文件,方便对线上资源进行维护

    一、配置pom文件进行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、拷贝其他依赖到指定目录

    <!--拷贝依赖到jar外面的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这两个文件 -->
                <addMavenDescriptor>false</addMavenDescriptor>
                <manifest>
                    <!-- 是否要把第三方jar加入到类构建路径 -->
                    <addClasspath>true</addClasspath>
                    <!-- 外部依赖jar包的最终位置 -->
                    <classpathPrefix>lib/</classpathPrefix>
                    <!-- 配置项目启动类 -->
                    <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>
                <!--静态文件排除-->
                <exclude>/static/</exclude>
            </excludes>
        </configuration>
    </plugin>
    

    至此Springboot jar包瘦身配置完成

    二、mvn打包查看瘦身结果

    1、target目录

    生成了lib和resource文件

    image-20210528153717855.png

    2、jar包中

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

    image-20210524145944087.png

    3、执行jar查看

    在jar包所在目录执行

    > java -jar .\model-one.jar
    
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.3.4.RELEASE)
     ===
     ===
    

    可正常运行

    三、Dockerfile编写和Docker打包

    1、Dockerfile文件

    FROM openjdk:8-jdk-alpine
    #指定时区
    RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && echo Asia/Shanghai > /etc/timezone
    
    ARG JAR_FILE
    ARG OUT_DIRECTORY
    #复制依赖jar
    COPY ${OUT_DIRECTORY}/lib /home/project/lib/
    #复制配置文件
    COPY ${OUT_DIRECTORY}/resources /home/project/resources/
    #复制项目jar
    COPY ${JAR_FILE} /home/project/model-one.jar
    #声明使用的端口,需要-p去绑定宿主机否则将随机绑定
    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 远程管理地址-->
            <dockerHost>tcp://127.0.0.1:2375</dockerHost>
            <!--私服地址不使用可以不配置-->
            <!--<registry>私服地址</registry>-->
            <images>
                <image>
                    <!--命名空间/仓库名称:镜像版本号-->
                    <name>${project.artifactId}:${project.version}</name>
                    <build>
                        <args>
                            <!--为Dockerfile中提供参数-->
                            <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、执行docker build打包

    image-20210524152419272.png

    2、target目录生成docker tar包

    image-20210524160734702.png

    3、docker远程服务中出现该镜像

    image-20210524160821955.png

    相关文章

      网友评论

          本文标题:SpringBoot打包分离lib和资源文件并使用Dockerf

          本文链接:https://www.haomeiwen.com/subject/uobxsltx.html