maven打包之assembly和shade对比

本文介绍了maven中assembly和shade插件用于打包java项目的区别和应用场景。assembly能创建thin jar,包含用户定义的目录和文件,但依赖修剪需手动。shade则能自动修剪依赖并解决冲突,但无法打thin jar,且不支持打包脚本和配置文件。
摘要由CSDN通过智能技术生成

maven打包对比

java项目少不了第三方依赖,当使用mvn作为项目管理工具时,可以使用assembly和shade插件打包。

assembly和shade对比

assembly的优点

  1. thin jar
    如果打fat jar,所有相关的类(含依赖)会被打进一个jar包,此时的问题是这个包除了比较大外,还失去了通过替换jar包更新程序的灵活性。assembly不会将依赖的jar包合并,仅仅是将它们放在一个压缩包中。

  2. 打包脚本,配置文件等
    assembly除了打包依赖外,还能include用户定义的目录或文件。如一般项目都会在bin目录中放启动脚本等。

  3. 自定义依赖
    assembly默认打包所有依赖的依赖,默认行为可能会打出很多jar包,可以手动include/exclude。

assembly的缺点

  1. 手动依赖修剪
    assembly虽然可以通过定义include/exclude修剪依赖,但是需要用户明确自己的代码中用到了哪些,没用到哪些,否则如果该include没有include或被exclude了,那么很容易出No Class Found Exception

shade的优点

  1. shade支持修剪不必要的依赖
    不像assembly需要用户自己进行修剪,shade能过通过字节码分析自动修剪掉不必要的依赖。
  2. 能够通过替换包名避免依赖冲突
    如果一个项目中同时依赖了某个库的两个版本,比如spark程序中,自己的代码依赖okhttp 3, spark本身的代码依赖okhttp 2.此时除了重写自己的代码,更改依赖外,还可以通过shade解决依赖冲突。巧用maven-shade-plugin解决依赖冲突 - 简书

shade的缺点

  1. 不能打thin jar
    即使shade能够修剪依赖,最终也只能将所有类打到一个jar包中。
  2. 无法打包脚本,配置文件等

assembly打包

1.添加assembly插件

项目pom.xml的bulid标签的plugins中添加如下

<build>
  <plugins>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <!--避免打出的包含id,本例中为bin-->
            <appendAssemblyId>false</appendAssemblyId>
            <descriptors>
                <descriptor>assembly.xml</descriptor>
            </descriptors>
        </configuration
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值