maven-shade-plugin

会把依赖的java文件全部打入target jar包里;
印象中target jar包中会有lib目录把依赖的jar包引入进来,但是shade是直接将依赖的java文件引入进来
maven-jar-plugin & maven-assembly-plugin & maven-shade-plugin的区别见如下文章链接
使用Maven打包你的应用——maven-jar-plugin & maven-assembly-plugin & maven-shade-plugin
maven之打包插件(maven-assembly-plugin,maven-shade-plugin与maven-assembly-plugin)
maven-assembly-plugin 和 maven-shade-plugin 比较

provided scope

如果dependency 是 provided scope,则不会将依赖的java文件打入target jar包
项目里刚好有的dependency是provided scope,有的则使用的默认的compile scope,比如
A.jar是provided scope
B.jar是compile scope
按理说,A jar包中的文件夹不应该打入target jar包,但是却打入了,使用mvn dependency:tree
发现B.jar依赖的A.jar,所以依赖是树形结构,即使provided scope也有可能被间接引入
通过把所有相关的dependency都改为provided scope问题解决
如果想使用最小依赖java文件集合,可以使用如下方法

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.1.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <minimizeJar>true</minimizeJar>  <!-- here is critical line -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

详见文章
maven-shade-plugin介绍及使用

更多推荐