在使用 Maven 构建 Java 项目时,有时需要减小生成的 JAR 包的体积,以提高部署效率或减少资源消耗。以下是一些有效的方法来减小 JAR 包的体积:
- 排除不必要的依赖
- 打包时,依赖jar包独立于应用jar包
1. 排除不必要的依赖
通过排除项目中不需要的依赖,可以显著减小 JAR 包的体积。在 pom.xml 中,可以在 标签中使用 标签来排除特定的依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.4</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 其他依赖项 -->
</dependencies>
2. 依赖jar包独立于应用jar包
一般来讲依赖不会经常变化,所以将 依赖 打包到应用外是个好主意,可以有效的减小应用包。
pom.xml 配置如下:
<!-- 打包时 依赖独立于项目jar包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.github.nan.web.NanWebApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
注意:第一部署应用 或者依赖有更新时,需要把依赖(lib)也上传到服务 。
效果如下:
├── target
│ ├── classes
│ ├── generated-sources
│ ├── lib
│ ├── maven-archiver
│ ├── maven-status
│ └── web-0.0.1-SNAPSHOT.jar