maven-shade-plugin 入门指南

  1. Why?
    通过 maven-shade-plugin 生成一个 uber-jar,它包含所有的依赖 jar 包。

  2. 目标描述

shade:help 显示帮助信息
mvn shade:help -Ddetail=true -Dgoal= 显示参数详情
shade:shade 执行着色委托给 Shader 组件的 Mojo。

  1. 用法
    配置 maven-shade-plugin
    maven-shade-plugin 将 goal shade:shade 绑定到 phase package 上。

org.apache.maven.plugins maven-shade-plugin 2.4.3 package shade 执行命令 mvn clean package 会在 target 文件生成一个 uber-jar,以 -shaded.jar 为后缀的 jar 包。

  1. 例子
    Selecting Contents for Uber JAR
    将该工程依赖的部分 Jar 包 include/exclude 掉。
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><artifactSet><excludes><exclude>classworlds:classworlds</exclude><exclude>junit:junit</exclude><exclude>jmock:*</exclude><exclude>*:xml-apis</exclude><exclude>org.apache.maven:lib:tests</exclude><exclude>log4j:log4j:jar:</exclude></excludes></artifactSet></configuration></execution></executions></plugin></plugins>
</build>

将依赖的某个 Jar 包内部的类或者资源 include/exclude 掉。

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>junit:junit</artifact><includes><include>junit/framework/**</include><include>org/junit/**</include></includes><excludes><exclude>org/junit/experimental/**</exclude><exclude>org/junit/runners/**</exclude></excludes></filter><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin></plugins>
</build>

maven-shade-plugin 自动将所有不使用的类全部排除掉,将 uber-jar 最小化。

  <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><minimizeJar>true</minimizeJar></configuration></execution></executions></plugin></plugins></build>

Attaching the Shaded Artifact
默认会生成一个Jar包和一个以 "-shaded"为结尾的uber-jar包,可以通过配置来指定uber-jar的后缀名。

  <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><shadedArtifactAttached>true</shadedArtifactAttached><shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense --></configuration></execution></executions></plugin></plugins></build>

Executable JAR
通过设置 MainClass 创建一个可执行 Jar 包。

  <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>org.sonatype.haven.HavenCli</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>

Relocating Classes
Java 工程经常会遇到第三方 Jar 包冲突,使用 maven shade plugin 解决 jar 或类的多版本冲突。 maven-shade-plugin 在打包时,可以将项目中依赖的 jar 包中的一些类文件打包到项目构建生成的 jar 包中,在打包的时候把类重命名。下面的配置将 org.codehaus.plexus.util jar 包重命名为 org.shaded.plexus.util。

  <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><relocations><relocation><pattern>org.codehaus.plexus.util</pattern><shadedPattern>org.shaded.plexus.util</shadedPattern><excludes><exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude><exclude>org.codehaus.plexus.util.xml.pull.*</exclude></excludes></relocation></relocations></configuration></execution></executions></plugin></plugins></build>

maven-shade-plugin 入门指南相关推荐

  1. [Apache Maven Shade Plugin] [example] [001] 官方例子:includes-excludes

    链接地址:[Selecting Contents for Uber JAR](http://maven.apache.org/plugins/maven-shade-plugin/examples/i ...

  2. Maven 教程之入门指南

    :notebook: 本文已归档到:「blog」 简介 Maven 是什么 Maven 是一个项目管理工具.它负责管理项目开发过程中的几乎所有的东西. 版本 - maven 有自己的版本定义和规则. ...

  3. maven-shade-plugin入门指南

    maven-shade-plugin入门指南 有时候,需要将复杂的项目, 包括各种xml文件属性文件, 类, jar等等打包到一个可以执行的jar包中, 然后用java -jar xxx.jar 来运 ...

  4. Maven入门指南⑦:Maven的生命周期和插件

    Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...

  5. Maven入门指南(一)

    原文链接  译文链接  译者:nkcoder  校对:方腾飞 Maven介绍: Maven是一个强大的Java项目构建工具.当然,你也可以使用其它工具来构建项目,但由于Maven是用Java开发的,因 ...

  6. hazelcast入门教程_Hazelcast入门指南第6部分

    hazelcast入门教程 这是有关Hazelcast的一系列文章中的第六篇. 如果一个人没有看过过去的五年,请到表中的内容后 ,我创建赶上. 本地客户 在上一篇文章之后,我决定要去本地化. 是的,我 ...

  7. Hazelcast入门指南第6部分

    这是有关Hazelcast的一系列文章中的第六篇. 如果一个人没有看过过去的五年,请到表中的内容后 ,我创建赶上. 本地客户 在上一篇文章之后,我决定要去本地化. 是的,我将演示Hazelcast自己 ...

  8. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)

    Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...

  9. Maven五分钟入门

    Maven 五分钟入门 ---本文翻译自Maven官网的Maven in 5 Minutes,稍有删改,所有版权归maven所有.本文只作学习交流之用. 安装 Maven 是一个java工具,因此,在 ...

最新文章

  1. 如何搭建socks5和ss节点_以太坊区块链搭建与使用(三)-联盟链
  2. linux下java调用python脚本,java - 在Linux Terminal中以编程方式从Java调用python脚本 - 堆栈内存溢出...
  3. 质量意味着在没有人看的时候把它做对
  4. Hi3516A开发--i2c tools安装和使用
  5. Tomcat系统架构
  6. mysql 数据迁移java_使用jdk进行数据迁移(sqlite迁移mysql)
  7. 全套学习!mysql命令窗口执行sql文件
  8. commonJS — 数字操作(for Number)
  9. 又一个学期结束了,送给在校大学生几句话
  10. C++实现人机对战围棋(使用Leela Zero权重)-策略
  11. 计算机网络应用ppt,1分钟骚操作顶别人10分钟!不可不懂的PPT神技
  12. linux程序开发ide,LiteIDE 开发工具指南 (Go语言开发工具)
  13. linux服务器密码策略设置:登录密码错误次数限制
  14. (c语言)自写求字符串长度函数
  15. Google play aso 关键词覆盖指南
  16. python输出26个大写字母怎么读_26个大写字母怎么读?
  17. java excel 批注_Excel里“批注”的各项操作介绍
  18. 四小龙变“四小虫”?AI独角兽们的AI+故事好不好讲?
  19. 小程序发布成功后搜索不到怎么办?
  20. React Native 中使用 Animated 实现物体下落动效

热门文章

  1. C语言实现程序连接数据库并实现简单的嵌入式服务器
  2. 使用JSPlumbECharts绘制流程图(以参加会议为例)
  3. 【开源数据集】无人机室内室外,视觉-惯性-激光雷达-UWB
  4. BroadcastReceiver 动态注册
  5. Unity基础篇:解决Asset Store资源商店点下载或导入没反应
  6. 手机计算机那个版本好,电脑系统哪个最好用 电脑系统对比介绍【图文】
  7. 超文本传输协议(HTTP/1.1)中文翻译
  8. ABP模块系统插件机制
  9. 计算机核心期刊新排名
  10. 传神语联何恩培:别着急唱衰机器翻译 未来将是人机共译时代