1、maven-compiler-plugin
- 作用:负责编译项目的 Java 源代码
- 功能:
1、将 .java 文件编译为 .class 文件
2、配置 Java 版本(如 source 和 target 版本,兼容 JDK 8/11/17 等) 默认行为:Maven 生命周期中的 compile 阶段会自动调用该插件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
2、maven-jar-plugin
- 作用:将编译后的类文件打包成 标准 JAR 文件
- 功能:
1、生成 target/{project-name}-{version}.jar
2、可配置 MANIFEST.MF(如指定主类 Main-Class) - 默认行为:Maven 的 package 阶段会自动调用该插件
局限:生成的 JAR 不包含依赖库,仅包含当前项目的代码和资源
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> </configuration> </plugin>
3、maven-assembly-plugin
- 作用:创建自定义的分发包,支持多种格式(如 ZIP、TAR、JAR 等)
- 功能:
1、生成包含依赖的 Fat JAR(将所有依赖的 JAR 解压后合并到单个 JAR 中)
2、生成分发包(如包含 bin/、lib/、conf/ 目录的结构) 特点:
1、通过 descriptor 文件定义打包规则。
2、适合生成复杂的分发结构,但不处理类冲突(若多个依赖包含相同类,会覆盖)<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
4、maven-shade-plugin
- 作用:创建 Uber JAR(将项目代码和依赖的类重新定位并合并到单个 JAR 中)。
- 功能:
1、解决依赖冲突(通过重命名类路径,例如将 org.apache.commons 重定位为 shaded.org.apache.commons)
2、合并资源文件(如 META-INF/services 文件,避免 ServiceLoader 加载失败)。 特点:
1、适用于需要解决类冲突的复杂场景。
2、比 assembly 插件更适合构建可执行的 Fat JAR<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.Main</mainClass> </transformer> </transformers> <relocations> <relocation> <pattern>org.apache.commons</pattern> <shadedPattern>shaded.org.apache.commons</shadedPattern> </relocation> </relocations> </configuration> </execution> </executions> </plugin>
5、使用 maven-compiler-plugin 与 maven-shade-plugin 组合
maven-shade-plugin 主要用于生成 “uber JAR”(包含所有依赖的可执行 JAR 文件)并且提供重定位功能,避免类冲突
<build>
<plugins>
<!-- 编译插件:编译源代码 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- 打包插件:生成包含依赖的 uber JAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase> <!-- 在打包阶段执行 -->
<goals>
<goal>shade</goal> <!-- 使用 shade 目标 -->
</goals>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom> <!-- 生成依赖精简的 POM 文件 -->
<archive>
<manifestEntries>
<Main-Class>com.example.MainClass</Main-Class> <!-- 主类 -->
</manifestEntries>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
构建过程:
1、编译阶段: 使用 maven-compiler-plugin 将 Java 源代码编译为字节码(.class 文件)。
2、打包阶段: 使用 maven-shade-plugin 将编译后的代码与所有依赖项一起打包成一个 “uber JAR” 文件,并且可以通过 createDependencyReducedPom 生成一个精简的 POM 文件以减少依赖管理问题。
生成的文件:
target/my-app-1.0-SNAPSHOT-shaded.jar(包含依赖的可执行 JAR 文件)
6、使用 maven-compiler-plugin 与 maven-assembly-plugin 组合
maven-assembly-plugin 也可以生成 “fat JAR”(包含所有依赖的可执行 JAR 文件),并且可以生成其他格式的压缩包如 ZIP、TAR 等
<build>
<plugins>
<!-- 编译插件:编译源代码 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- 打包插件:生成包含依赖的 fat JAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.MainClass</mainClass> <!-- 主类 -->
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef> <!-- 指定打包依赖的方式 -->
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase> <!-- 在打包阶段执行 -->
<goals>
<goal>single</goal> <!-- 使用 single 目标 -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
构建过程
1、编译阶段: 使用 maven-compiler-plugin 将 Java 源代码编译为字节码。
2、打包阶段: 使用 maven-assembly-plugin 将编译好的代码及所有依赖项打包成一个 “fat JAR” 文件。
生成的文件:
target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar(包含依赖的可执行 JAR 文件)
如感兴趣,点赞加关注,谢谢!!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。