起始-导航
Maven三个插件打包:
1.maven-jar-plugin,默认的打包插件,用来打普通的project JAR包;
2.maven-shade-plugin,用来打可执行JAR包,也就是所谓的fat JAR包;
3.maven-assembly-plugin,支持自定义的打包结构,也可以定制依赖项等。
标准的顶层模块编译打包+源码
一般顶层的pom模块可以进行使用:

<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>
<compilerVersion>1.8</compilerVersion>
<compilerArgument>-XDignore.symbol.file</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
打包后为:

打包一个普通带有依赖的maven项目
方式一:使用maven-assembly-plugin
<build>
<plugins>
<!-- any other plugins -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 附带依赖打包 -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- 指定启动类 -->
<archive>
<manifest>
<mainClass>com.changlu.UpFTPClient</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>


方式二:使用maven-shade-plugin
区别
| 特性 | maven-shade-plugin | maven-assembly-plugin |
|---|---|---|
| 默认行为 | 可以替换原 JAR | 生成单独的 JAR |
| 配置参数 | shadedArtifactAttached=false |
总是生成新文件 |
| 输出文件 | 一个 JAR | 两个 JAR(原 + with-dependencies) |
因为用了 shade 且配置了 shadedArtifactAttached=false,所以你只看到一个 JAR 文件,但它已经包含了所有第三方依赖。
案例2:SpringBoot+Thymeleaf打包项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>jar</packaging>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable> <!-- 可选,用于生成可执行的jar -->
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>

评论区请在客户端页面查看