概述

该插件提供了将artifact打包到一个本地jar包的能力,包括其依赖关系以及一些参数如 shade -rename重命名依赖关系的包。

目标

shade:shade 绑定到建生命周期中的package阶段,用于创建a shaded jar。

  1.   mvn package

用法

1.配置

  1. <project>
  2. ...
  3. <build>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-shade-plugin</artifactId>
  8. <version>3.0.</version>
  9. <configuration>
  10. <!-- put your configurations here -->
  11. </configuration>
  12. <executions>
  13. <execution>
  14. <phase>package</phase>
  15. <goals>
  16. <goal>shade</goal>
  17. </goals>
  18. </execution>
  19. </executions>
  20. </plugin>
  21. </plugins>
  22. </build>
  23. ...
  24. </project>

2.支持的transformer

  1. <configuration>
  2. <!-- 打包带有主函数入口的jar报 -->
  3. <transformers>
  4. <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  5. <mainClass>com.ultrapower.secsight.main.Runner</mainClass>
  6. </transformer>
  7. </transformers>
    </configuration>
  1. ApacheLicenseResourceTransformer 防止许可复制
  2. ApacheNoticeResourceTransformer Prepares merged NOTICE
  3. AppendingTransformer Adds content to a resource
  4. ComponentsXmlResourceTransformer Aggregates Plexus components.xml
  5. DontIncludeResourceTransformer Prevents inclusion of matching resources
  6. IncludeResourceTransformer Adds files from the project
  7. ManifestResourceTransformer 设置清单MANIFEST中的条目
    ServicesResourceTransformer Merges META-INF/services resources
    XmlAppendingTransformer Adds XML content to an XML resource

用例

1.控制本地JAR的依赖

通过exclude/include控制本地JAR的依赖:

  1. <project>
  2. ...
  3. <build>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-shade-plugin</artifactId>
  8. <version>3.0.0</version>
  9. <executions>
  10. <execution>
  11. <phase>package</phase>
  12. <goals>
  13. <goal>shade</goal>
  14. </goals>
  15. <configuration>
  16. <artifactSet>
  17. <excludes>
  18. <exclude>classworlds:classworlds</exclude>
  19. <exclude>junit:junit</exclude>
  20. <exclude>jmock:*</exclude>
  21. <exclude>*:xml-apis</exclude>
  22. <exclude>org.apache.maven:lib:tests</exclude>
  23. <exclude>log4j:log4j:jar:</exclude>
  24. </excludes>
  25. </artifactSet>
  26. </configuration>
  27. </execution>
  28. </executions>
  29. </plugin>
  30. </plugins>
  31. </build>
  32. ...
  33. </project>

2.自动精简uber-jar

  1. <project>
  2. ...
  3. <build>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-shade-plugin</artifactId>
  8. <version>3.0.0</version>
  9. <executions>
  10. <execution>
  11. <phase>package</phase>
  12. <goals>
  13. <goal>shade</goal>
  14. </goals>
  15. <configuration>
  16. <minimizeJar>true</minimizeJar>
  17. </configuration>
  18. </execution>
  19. </executions>
  20. </plugin>
  21. </plugins>
  22. </build>
  23. ...
  24. </project>

从版本1.6开始,minimizeJar将保留在filter中标记为include的类。请注意,为artifact中的类指定include filter会隐式将该artifact中的所有其他非指定类排除。

  1. <project>
  2. ...
  3. <build>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-shade-plugin</artifactId>
  8. <version>3.0.0</version>
  9. <executions>
  10. <execution>
  11. <phase>package</phase>
  12. <goals>
  13. <goal>shade</goal>
  14. </goals>
  15. <configuration>
  16. <minimizeJar>true</minimizeJar>
  17. <filters>
  18. <filter>
  19. <artifact>log4j:log4j</artifact>
  20. <includes>
  21. <include>**</include>
  22. </includes>
  23. </filter>
  24. <filter>
  25. <artifact>commons-logging:commons-logging</artifact>
  26. <includes>
  27. <include>**</include>
  28. </includes>
  29. </filter>
  30. </filters>
  31. </configuration>
  32. </execution>
  33. </executions>
  34. </plugin>
  35. </plugins>
  36. </build>
  37. ...
  38. </project>

3.Classes重定位

  1. <project>
  2. ...
  3. <build>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-shade-plugin</artifactId>
  8. <version>3.0.0</version>
  9. <executions>
  10. <execution>
  11. <phase>package</phase>
  12. <goals>
  13. <goal>shade</goal>
  14. </goals>
  15. <configuration>
  16. <relocations>
  17. <relocation>
  18. <pattern>org.codehaus.plexus.util</pattern>
  19. <shadedPattern>org.shaded.plexus.util</shadedPattern>
  20. <excludes>
  21. <exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
  22. <exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
  23. </excludes>
  24. </relocation>
  25. </relocations>
  26. </configuration>
  27. </execution>
  28. </executions>
  29. </plugin>
  30. </plugins>
  31. </build>
  32. ...
  33. </project>

遇到错误

  1. Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:1.6:shade (default) on project justfortest: Error creating shaded jar: null: NullPointerException -> [Help 1]
  2. org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:1.6:shade (default) on project justfortest: Error creating shaded jar: null

该插件不能够用于父项目POM,即<packaging>pom</packaging>

【maven插件】maven-shade-plugin的更多相关文章

  1. groovy入门(2-1)Groovy的Maven插件安装:Plugin execution not covered by lifecycle configuration

    参考链接:http://www.cnblogs.com/rightmin/p/4945797.html 1.引入groovy的jar包 2.引入groovy编译插件 3.遇到问题 Plugin exe ...

  2. 【mybatis源码学习】利用maven插件自动生成mybatis代码

    [一]在要生成代码的项目模块的pom.xml文件中添加maven插件 <!--mybatis代码生成器--> <plugin> <groupId>org.mybat ...

  3. Maven学习(十六)-----Maven插件

    Maven插件 Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的.Maven 插件通常用于: 创建 jar 文件 创建 war 文件 编译代码文件 进行代码单元测试 创建项目文档 创建 ...

  4. Java-Maven-Runoob:Maven 插件

    ylbtech-Java-Maven-Runoob:Maven 插件 1.返回顶部 1. Maven 插件 Maven 有以下三个标准的生命周期: clean:项目清理的处理 default(或 bu ...

  5. 使用maven插件dockerfile-maven-plugin生成Docker镜像并推送到镜像仓库

    1.引入maven插件 <build> <plugins> <plugin> <groupId>com.spotify</groupId> ...

  6. maven课程 项目管理利器-maven 3-4 eclipse安装maven插件和新建maven项目

    本节主要讲了两个主要内容, 1       eclipse安装maven插件 2 新建maven项目 3 本人实操 1       eclipse安装maven插件 eclipse4.0以上和myec ...

  7. eclipse插件——maven

    项目开发中遇到的问题 都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 为什么在我的机器上可以正常打包,而配置管理员却打不出来? 项目组加入了新的人员,我要给他说明编译环境如何设 ...

  8. [Maven]Apache Maven 入门篇

    作者:George Ma 上 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 ma ...

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

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

  10. 施用 maven shade plugin 解决 jar 或类的多版本冲突

    施用 maven shade plugin 解决 jar 或类的多版本冲突   使用 maven shade plugin 解决 jar 或类的多版本冲突java 应用经常会碰到的依赖的三方库出现版本 ...

随机推荐

  1. Centos7安装nginx并设置为HTTP代理服务器(正向代理)

    # wget https://nginx.org/download/nginx-1.9.9.tar.gz # .tar.gz # cd nginx- # ./configure --prefix=/u ...

  2. SoapUI中XML解析

    From http://www.robert-nemet.com/2011/11/groovy-xml-parsing-in-soapui.html Introduction Since soapUI ...

  3. node.js 下载安装及gitbook环境安装、搭建

    最近需要gitbook看文档,于是各种百度,各种安装,很多都是无法正常安装完成的,比较纠结啊 最后,终于发现一个好用的,现分享一下地址(也是给自己做个记录): 1.node.js下载地址: http: ...

  4. Grails笔记三:完整的文件上传实例

    文件上传在web应用中是比较普遍的,相对于使用jsp等技术实现文件上传,Grails的文件上传着实让人喜爱,因为极其简单,让人看一遍就容易轻松记住!不多说,实例如下: 假设已有一个名为uploadFi ...

  5. 移动端踩坑之旅-ios下fixed、软键盘相关问题总结

    最近一个项目掉进了移动端的大坑,包括ios下fixed布局,h5唤起键盘等问题,作为一个B端程序员,弱项就是浏览器的兼容性和移动端的适配(毕竟我们可以要求使用chrome),还好这次让我学习了一下相关 ...

  6. 改变input光标颜色与输入字体颜色不同

    设置input css: color #ffd600text-shadow 0px 0px 0px #bababa -webkit-text-fill-color initial input, tex ...

  7. 第2阶段——编写uboot之编译测试以及改进(3)

    编译测试: 1.将写好的uboot复制到linux下面 2.make编译,然后将错误的地方修改,生成boot.bin (编译出错的解决方案:http://www.cnblogs.com/lifexy/ ...

  8. POJ3228 并查集或二分最大流枚举答案

    忘记写题意了.这题题意:给出每个地点的金矿与金库的数量,再给出边的长度.求取最大可通过边长的最小权值使每个金矿都能运输到金库里. 这题和之前做的两道二分枚举最大流答案的问法很相识,但是这里用最大流速度 ...

  9. CRC与MD5的异同

    php中CRC32的用法: crc32 - 计算一个字符串的 crc32 多项式 生成 string 参数的 32 位循环冗余校验码多项式--: 这句话从英文翻译过来的,不正确,准确的说应该是这么理解 ...

  10. mpls vpn剩余笔记

    将IP地址映射为简单的具有固定长度的标签 用于快速数据包交换 20 3 1 8 在整个转发过程中,交换节点仅根据标记进行转发 标签交换路径(LSP) 多协议标签交换MPLS最初是为了提高转发速度而提出 ...