maven-shade-plugin详解

  • 介绍
  • 为uber-jar选择内容
  • 类重定位(解决jar包冲突)
    • 一个解决jar包冲突的例子
  • Shaded Artifact附加名字
  • 可执行jar包

最近在解决java jar包冲突的时候用到了shade插件,于是从官网仔细看了下shade的详细使用,翻译总结如下,希望能用得到。

shaded直译为遮盖,这可以比较好的形容maven-shade-plugin插件的功能,比如relocation,打胖jar等

介绍

Apache maven shade plugin提供把工程的artifact及其依赖打包到一个uber-jar中并能隐藏起来(比如重命名),shade插件仅仅有一个功能就是创建一个shaded包。
那什么是uber-jar呢,uber在德语中是above或over的意思,在这里表示是从单一的jar提升到“over-jar”,即把所有的依赖都定义到一个jar文件里。
好了,现在我们知道shade插件的基本作用了,现在从官网给出的几个例子看看实际的应用。

为uber-jar选择内容

这是官网直译的标题,用我们容易理解的就是通过shade插件我们可以为生成的那个jar包选择包含哪些依赖以及排除哪些依赖。

  • 1、支持两种操作include和exclude
  • 2、 配置格式:groupId:artifactId[[:type]:classifier],至少包含groupid和artifactid,type和类名可选
  • 3、支持’*’ 和 ‘?’执行通配符匹配
    比如,一个示例如下:
<project>...<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.0.0</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>...
</project>

类重定位(解决jar包冲突)

官网是“Relocating Classes”,如果一个uber-jar会被其他项目引用,uber-jar中依赖的类可能会导致类定位冲突(由于不同版本的jar包引起),我们可以通过shade插件来将被隐藏的类重定位以使该类只在该uber-jar中使用,这种方式也经常被用来解决jar包冲突问题。
示例如下:

<project>...<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.0.0</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>...
</project>

上述例子是让org.codehaus.plexus.util包和它的子包移动到 org.shaded.plexus.util包中,而类Xpp3Dom和其他的一些则保留在原来的package中。

一个解决jar包冲突的例子

代码https://github.com/cuiwenxu/package-test

https://zhuanlan.zhihu.com/p/62796806

Shaded Artifact附加名字

默认情况下,当执行installed/deployed时候,会默认生成两个jar包,一个以-shaded结尾,这个我们可以配置更改,示例如下:

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

则会生成以-myName结尾的jar包。

可执行jar包

要创建一个可执行uber-jar包,也可以将入口添加进来,示例如下:

<project><groupId>shade.test</groupId><artifactId>shade.test</artifactId><version>1.0-SNAPSHOT</version>...<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.0.0</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>Main</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>...
</project>

假设入口函数为:

public class Main {public static void main(String[] args) {System.out.println("shade Executable test");}
}

执行mvn package,生成两个jar文件,一个是原始的original-shade.test-1.0-SNAPSHOT.jar,一个是可执行的shade.test-1.0-SNAPSHOT.jar。
执行java -jar shade.test-1.0-SNAPSHOT.jar,效果如下:

以上,是maven shade插件的一些用法。

maven-shade-plugin详解相关推荐

  1. Apache Maven Shade插件详解

    Apache Maven项目提供的Shade插件,能够将Maven应用打包为超级的uber-jar(也称为fat jar,或shaded jar).即在打包的过程中,可以: 包含依赖库 重命名依赖库的 ...

  2. 发布个人项目jar包到maven中央仓库详解

    发布个人项目jar包到maven中央仓库详解 1.在sonatype提交发布工单(Issue) sonatype是由社区支持的开源项目托管服务(Open Source Project Reposito ...

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

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

  4. Eclipse中Maven常用命令以及Maven生命周期详解

    Eclipse中maven常用的命令 在某一个maven项目右键快捷方式,然后点击Run As就可以发现几个Maven的命令: Maven Build: 这个命令用于编译Maven工程,执行命令后会在 ...

  5. 使用nexus搭建maven私服教程详解

    私服是什么 私服,私有服务器,是公司内部Maven项目经常需要的东东,不总结一下,不足以体现出重视.Nexus是常用的私用Maven服务器,一般是公司内部使用.下载地址是http://www.sona ...

  6. maven常用插件详解

    1. 简介 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说, ...

  7. IntelliJ IDEA for Mac中的Maven操作窗口详解

    文章目录 简介 操作按钮详解 Reload All Maven Projects Generate Sources and Update Folders For All Projects Downlo ...

  8. Spring Boot的Maven插件Spring Boot Maven plugin详解

    pring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven ...

  9. 【Maven】Maven POM配置详解

    就像web项目的核心是web.xml一样,Maven项目的核心是pom.xml,POM(project object model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,如何声明依赖 ...

  10. maven pom.xml详解

    什么是pom?     pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的 ...

最新文章

  1. ”计算机操作系统“学习笔记1
  2. 薛澜:人工智能发展要让创新驱动和敏捷治理并驾齐驱
  3. 「iOS 面试之道」勘误(二)
  4. COMMAND 模式
  5. golang辟谣之模板编程
  6. Protobuf从安装到配置整理帖
  7. java 数据截断_java – 数据截断:第1行的列’标志’的数据太长
  8. LeetCode之Nim Game
  9. 360私有云平台-HULK 5岁啦~
  10. 区块链必读的书_最好的区块链:5条必读
  11. PsotgreSQL
  12. 参加工作第三个月的感悟
  13. matlab做多元统计分析,matlab多元统计分析
  14. ab性能测试工具使用
  15. 离散傅里叶变换的核心公式
  16. 微信开放平台与微信公众平台的支付关系
  17. linux笔记:使用conda命令管理包、管理环境详细讲解
  18. 新手小白如何挑选吉他,附几款超高性价比吉他推荐
  19. O3DF执行董事Royal O’Brien:开源没有边界,所有共享的声音都会变成实际方向
  20. db2 dec函数oracle,DB2常用函数与Oracle有什么区别?

热门文章

  1. gta5服务器错误 无法在线登录,GTA5在线登陆失败您从未在此机器上成功登录过怎么办 在线登陆失败解决方法介绍...
  2. rabbitmq和springboot实现智能家居远程控制
  3. pandas踩坑:nested renamer is not supported python
  4. Power PC 与 zynq数据交互(基于LocalBus)
  5. 简述UISegment的属性和用法
  6. 《天天向上》聚焦首个碳中和主题公园 | 北京温榆河公园
  7. 拒绝996,像Phodal一样天天秀恩爱 | ThoughtWorks「校招」北京站
  8. DTCC 2021 | 华为云数据库战略启示录
  9. JS清空数组的几种方法比较
  10. Staubli机器人模拟器St鋟bli Robotics Suite 7.3.1