欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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"/*
相关标签: assemble