maven-shade-plugin入门指南

有时候,需要将复杂的项目,包括各种xml文件属性文件, 类, jar等等打包到一个可以执行的jar包中, 然后用java -jar xxx.jar 来运行项目,这样简单方便,特别是在编写一些测试工具时,尤为重要。
但是经常发现打包后的项目无法启动, 其中一大类是您项目有问题, 但是这个相对好解决。
通过 maven-shade-plugin 生成的jar包,它包含所有的依赖 jar 包。

使用

配置 maven-shade-plugin

maven-shade-plugin 将 goal shade:shade 绑定到 phase package 上。

<build>
     <plugins>
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-shade-plugin</artifactId>
             <version>2.4.3</version>
             <configuration>
                <!-- put your configurations here -->
             </configuration>
             <executions>
                 <execution>
                     <phase>package</phase>
                     <goals>
                        <goal>shade</goal>
                     </goals>
                 </execution>
             </executions>
         </plugin>
     </plugins>
 </build>

执行命令:mvn clean package

例子

将该工程依赖的部分 Jar(fastjson) 包 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>
                        <minimizeJar>true</minimizeJar>
                        <artifactSet>
                            <excludes>
                                <exclude>com.alibaba:fastjson</exclude>
                            </excludes>
                        </artifactSet>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

configuration的层级问题

https://stackoverflow.com/questions/33908315/what-is-the-difference-between-executions-and-configurations-in-a-maven-plugin

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

<configuration>
    <minimizeJar>true</minimizeJar>
</configuration>

默认会生成一个Jar包和一个以 “original-”为前缀的original-jar包,可以通过配置来指定original-jar的后缀名。

<configuration>
    <shadedArtifactAttached>true</shadedArtifactAttached>
    <!-- 名称会作为后缀在shade构件jar包后 -->
    <shadedClassifierName>jackofall</shadedClassifierName>
</configuration>

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!