依赖包分离部署方案

  • 背景

    生产环境中,需要本地打包上传服务器,而本地打包时,jar中会同时将项目依赖也打入进去,造成jar体积过大,为了减小运行jar包的体积,可以做如下配置修改。

  • 修改方法
    修改项目子模块 xxx-xxx-server中的pom文件。

  1. spring-boot-maven-plugin 中增加 configuration 配置,并指定启动类
  2. 增加 maven-dependency-plugin 依赖打包插件

POM中 build 配置

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>

    </resources>
    <filters>
        <filter>../../src/main/filters/config-${profile.active}.properties</filter>
    </filters>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <includes>
                    <include>
                        <groupId>nothing</groupId>
                        <artifactId>nothing</artifactId>
                    </include>
                </includes>
                <mainClass>com.xxx.v2x.ControlServerApplication</mainClass>
                <layout>ZIP</layout>
            </configuration>
        </plugin>

        <!--拷贝依赖到jar外面的lib目录-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <!--导出所有的 jar 包-->
                <execution>
                    <id>copy-dependencies</id>
                    <!-- 在实际打包中,执行任何的必要的操作。 -->
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <!--指定的依赖路径-->
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <version>2.6</version>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <encoding>UTF-8</encoding>
                <nonFilteredFileExtensions>
                    <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
                </nonFilteredFileExtensions>
            </configuration>
        </plugin>
        <!-- docker打包插件 -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>${dockerfile-maven-plugin.version}</version>
            <configuration>
                <repository>${docker.image.prefix}/${project.artifactId}</repository>
                <tag>${tiannet-project.version}</tag>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>

    </plugins>
</build>

**打包成功后,会在target目录下生成lib文件夹和响应的jar包

将lib包下的依赖上传至服务器后,每次只需要更改相应的jar文件就可以了

  • jar启动
    修改后的jar中不在包含依赖,所以启动方式也有锁改变。需要使用参数 -Dloader。path 指定lib所在路径。形如:
    java -Dloader.path=./lib -jar xx-xx-server.jar
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容