Maven 优化项目打包-依赖版本管理
一、依赖版本管理
使用Maven时,实际开发的项目一般来讲都是 聚合项目,不同的模块使用不同的依赖,进行依赖版本管理就势在必行,不然依赖冲突的话会很难受。
什么是聚合项目?
<packaging>pom</packaging>
说明你的 Maven 项目是一个聚合项目(Aggregator Project)或者父项目(Parent Project)。
如何统一版本?
在父项目中的 pom.xml 中使用 dependencyManagement
统一管理依赖版本,例如:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
至此子项目的依赖就不需要填写 version
。
二、依赖包打包优化(依赖独立于应用)
一般来讲依赖不会经常变化,所以将 依赖 打包到应用外是个好主意,可以有效的减小应用包。
如何做?
- 使用插件将依赖打包到
\lib
目录下,并且保证生产环境在应用同级目录创建lib
目录,将需要的依赖放到lib
下。
Maven 插件,如下:
<!-- 打包时将依赖 jar 放到 lib目录下-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version> <!-- 替换为你需要的版本号 -->
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- 指定依赖项的输出目录 -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!-- 排除不需要的依赖项 -->
<!-- <excludeArtifactIds>unwanted-artifact</excludeArtifactIds>-->
</configuration>
</execution>
</executions>
</plugin>
<!-- 打包时,应用jar包内不包括依赖jar-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!-- 这里配置你的启动类 -->
<mainClass>your.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
打包的效果,可以参考下: