appassembler-maven-plugin插件打包的时候如何把本地依赖的jar包打进去
程序员文章站
2022-06-18 16:50:04
...
有时候maven仓库没有的jar包,我们需要从本地址指定文件路径并且指定scope为system来引入依赖。默认的,assemble插件是不会把本地依赖的jar包打包进去的。
<dependency>
<groupId>*</groupId>
<artifactId>*</artifactId>
<version>*</version>
<scope>system</scope>
<systemPath>${basedir}\lib</systemPath>
</dependency>
assemble插件的配置中,可以指定打包结果输出的根目录和jar包存放目录。
<!-- 根目录 -->
<assembleDirectory>myDemo</assembleDirectory>
<!-- 打包的jar,以及maven依赖的jar放到这个目录里面 -->
<repositoryName>lib</repositoryName>
可以通过在pom文件中的build节点中单独指定本地依赖jar包的存放路径作为资源,输出目录targetPath指定到我们打包后存放jar包的地址,这样本地依赖的jar包就可以变相打进去了。这里的地址是相对于本地依赖jar包里面作为目录起点的相对位置。
<resources>
<resource>
<directory>${project.basedir}/lib</directory>
<targetPath>../../myDemo/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
可能还有个问题,如果打包后生成启动脚本,脚本里面有指定JVM启动参数,里面的CLASSPATH默认是指向所有依赖的jar包的,但不包括本地依赖的jar包,虽然我们打进去了,但是依赖不到,依然无法启动。
CLASSPATH="$BASEDIR"/conf:"$REPO"/spring-boot-starter-2.1.5.RELEASE.jar:$REPO"/hamcrest-core-1.3.jar:.....(省略很多,就是所有jar包一个个列出来)
通过设置classpath通配符,可以让上面的配置清爽很多,同时所有打包后的jar目录的包都可以设置到classpath了。另外jvm启动参数也简短了很多,在linux服务器上查看进程也清晰了。
<useWildcardClassPath>true</useWildcardClassPath>
设置以后的classpath如下:
CLASSPATH="$REPO"/*
下一篇: Jenkins环境搭建