文章目录
-
-
- [1. **标准 JAR 打包**](#1. 标准 JAR 打包)
- [2. **可执行 JAR(Executable JAR)**](#2. 可执行 JAR(Executable JAR))
- [3. **Uber JAR(Fat JAR / Shadow JAR)**](#3. Uber JAR(Fat JAR / Shadow JAR))
- [4. **Spring Boot JAR(Spring Boot Executable JAR)**](#4. Spring Boot JAR(Spring Boot Executable JAR))
- 总结
-
Maven 提供了多种打包方式,每种方式都有其特定的用途和优缺点。以下是 Maven 常见的打包方式以及它们在使用上的区别:
1. 标准 JAR 打包
打包方式
使用 maven-jar-plugin
插件打包。生成的 JAR 文件仅包含编译后的类文件和资源文件,不包括依赖项。
配置示例
xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
使用方式
-
运行 :
bashjava -cp target/your-artifact-id-version.jar com.example.MainClass
需要指定类路径 (
-cp
) 来包含 JAR 文件和其他依赖项。
优点
- 文件较小,只包含项目的代码和资源文件。
- 适合在依赖项已经被管理的环境中使用,例如服务器或容器中。
缺点
- 启动时需要手动管理类路径,比较麻烦。
- 依赖项需要在运行时能够被找到,不适合分发给最终用户的场景。
2. 可执行 JAR(Executable JAR)
打包方式
同样使用 maven-jar-plugin
插件,但在 MANIFEST.MF
文件中指定主类,使得 JAR 文件可以直接被执行。
配置示例
xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
使用方式
-
运行 :
bashjava -jar target/your-artifact-id-version.jar
优点
- 简化了运行命令,无需指定类路径。
- 更易于分发和运行,特别适合终端用户使用。
缺点
- 依赖项仍然需要在运行时可用。
- 仅适用于不需要包含所有依赖项的场景。
3. Uber JAR(Fat JAR / Shadow JAR)
打包方式
使用 maven-shade-plugin
或 maven-assembly-plugin
插件生成的 JAR 文件,其中包含了所有的依赖项。
配置示例(maven-shade-plugin)
xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
使用方式
-
运行 :
bashjava -jar target/your-artifact-id-version-shaded.jar
优点
- 包含所有依赖项,简化了部署和运行过程。
- 适合在没有外部依赖项的环境中运行。
缺点
- 生成的 JAR 文件可能较大。
- 可能会出现类冲突或依赖重复的问题,需要额外配置来处理。
4. Spring Boot JAR(Spring Boot Executable JAR)
打包方式
使用 spring-boot-maven-plugin
插件生成的 JAR 文件,包含了 Spring Boot 运行时和所有的项目依赖。
配置示例
xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
使用方式
-
运行 :
bashjava -jar target/your-artifact-id-version.jar
优点
- 包含所有依赖和 Spring Boot 特性,简化了部署和运行过程。
- 提供内嵌的服务器(如 Tomcat、Jetty)以运行 Spring Boot 应用程序,无需额外的应用服务器。
缺点
- 文件可能较大,因为包含了所有的依赖项。
- 对于不使用 Spring Boot 的项目,这种打包方式可能显得过于复杂。
总结
- 标准 JAR: 适合在依赖项已经被管理的环境中使用,需要手动指定类路径。
- 可执行 JAR: 简化运行过程,但不包含所有依赖项,适合分发给用户。
- Uber JAR: 包含所有依赖项,便于在无外部依赖的环境中运行,但文件较大。
- Spring Boot JAR: 包含所有依赖和 Spring Boot 特性,适合 Spring Boot 项目,简化了运行和部署。
根据项目需求和目标环境选择合适的打包方式,可以提高开发效率和部署灵活性。
希望对你有所帮助,若有问题欢迎指正~😊