POM打包采用lib包分离策略

背景

在springboot项目构建时,难免需要依赖其他的jar包,但是在项目打包部署的时候,就需要指定lib包,一般情况下,会将lib中依赖的jar包一块打包,这就导致了最后的应用的jar包非常大,使部署十分不方便,而且也不利于修改。下面就来介绍一下lib包分离的策略。

解决方案

在pom文件中引入两个插件maven-dependency-plugin和maven-jar-plugin;

  • maven-dependency-plugin
    主要作用是可以将依赖的所有lib包,复制到指定位置,项目中用法可参考如下:
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
            				<!--将依赖的jar拷贝至项目编译目录的lib文件夹中-->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
  • maven-jar-plugin
    主要作用是配置依赖的jar信息,比如是否添加jar包依赖的路径、指定依赖的jar包路径以及指定函数的主入口,项目中用法可参考:
 <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <version>3.1.0</version>
                 <configuration>
                     <archive>
                         <manifest>
                             <!-- 指定入口函数 -->
                             <mainClass>com.yh.main.HelloMavenJar</mainClass>
                             <!-- 是否添加依赖的jar路径配置 -->
                             <addClasspath>true</addClasspath>
                             <!-- 依赖的jar包存放位置,和生成的jar放在同一级目录下 -->
                             <classpathPrefix>lib/</classpathPrefix>
                         </manifest>
                     </archive>
                 </configuration>
             </plugin>
  • 小结
    只需要在pom文件中添加如上两个插件就可以实现lib包的打包分离,整体配置如下:
<plugins>
            <!--拷贝依赖 copy-dependencies-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>xxx.xxx.xxxApplication</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>

总结

jar包部署的优化策略很多,lib包分离只是其中一种,除此之外,如果项目中需要使用的静态文件过多过大,当然也将指定的静态资源进行分离,进一步缩小应用jar包的大小,下一篇来介绍一下,对资源文件的分离

你可能感兴趣的:(maven,springBoot,pom打包,lib包分离策略,优化pom打包方式)