provided scope 用maven-shade-plugin打包还是打到了target jar包里
·
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>
更多推荐


所有评论(0)