如何将Maven项目的Fat Jar输出到指定目录并自定义文件名
Maven自定义输出Fat Jar实现方案
你之前配置的全局
<build><directory>是Maven整个构建流程的工作根目录,编译生成的class文件、源码缓存等中间产物默认都会写入该目录,因此会产生大量多余文件,不建议直接修改该参数到目标输出目录。
核心实现(使用maven-shade-plugin)
maven-shade-plugin是Maven官方提供的打包插件,支持将所有项目依赖打入Jar包生成Fat/Uber Jar,同时支持自定义文件名、输出路径,中间构建产物默认生成在项目根目录的target文件夹,不会污染你指定的目标输出目录。
在pom.xml的<build><plugins>节点中添加如下配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 自定义Jar包文件名,无需加.jar后缀 --> <finalName>my-custom-app</finalName> <!-- 指定Fat Jar的输出目录,替换为你自己的路径 --> <outputDirectory>my/path/</outputDirectory> <!-- 如果你不需要生成可执行Jar,可删除整个transformers节点 --> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <!-- 替换为你项目启动主类的全限定名 --> <mainClass>com.yourpackage.YourMainClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
配置完成后执行mvn package命令,即可在指定的my/path/目录下得到唯一的自定义命名Fat Jar,所有中间文件都会保存在默认的target目录中,不会出现在目标输出目录。
可选:自动清理中间文件
如果你不需要保留target目录的中间构建产物,可以额外添加如下配置,构建完成后会自动删除target目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>clean</goal> </goals> <configuration> <excludeDefaultDirectories>true</excludeDefaultDirectories> <filesets> <fileset> <directory>target</directory> </fileset> </filesets> </configuration> </execution> </executions> </plugin>
内容的提问来源于stack exchange,提问作者Eyüp Yıldız
相关产品推荐
相关产品推荐

