maven打包指定模块命令_Maven多模块如何打包本地的jar包
到war中
现如今,使⽤spring-boot和maven开发项⽬已经越来越普遍了,同时⼤多时候我们也是通过maven以及公共的repo和私服repo来管理⾃⼰的jar包依赖,但难免会碰到有些jar包需要放在本地,通过本地jar包的形式加载到⾃⼰的项⽬⾥。
本⽂主要阐述这种情况下怎么处理,项⽬中虽然使⽤的spring-boot,但是还是打包成了war包,项⽬结构如下
project-A  //⽗⼯程
module-a //启动类模块同时也是打包模块
module-b //需要使⽤本地lib的模块
lib //存放本地lib的⽬录
为了能够在部署war包后项⽬能够正常运⾏,需要做下⾯⼏件事
1. 如何在需要的模块中引⽤本地的包?
这⾥也即如何在 module-b 中引⽤lib⽬录中的jar包,如下配置
<dependency>
<groupId>upId</groupId>
<artifactId>your.package.artifactId</artifactId>
<version>your.package.artifactId</version>
<scope>system</scope>
<systemPath>${basedir}/../libs/your-package.jar</systemPath>
</dependency>
绝对路径,指向你的本地jar包路
上述中,前三个和我们正常的maven配置⼀样,这需要注意的就是<systemPath>配置了,需要使⽤绝对路径,指向你的本地jar包路
径,${basedir}表⽰项⽬根⽬录,但是这⾥的根⽬录并不是我所想的⽗模块的⽬录(即
但是这⾥的根⽬录并不是我所想的⽗模块的⽬录(即project-A⽬录路径)⽽是该pom所在的模块的⽬录),${basedir}代表的应该是本pom所在的模块对应的⽬录,所以我们需要使⽤ ../ 来到对应的jar包。为了解决这⽬录(即module-b⽬录)
个问题,⾃⼰google了下:
how to get the super pom basedir in a child module pom?s tackoverflow
有⼏种⽅案,⽐如使⽤${project.parent.basedir}或者在⽗pom中定义<rootPath> ${basedir} </rootPath>然后在⼦pom中使⽤${rooPath}本⼈实践均⽆效。
2. 如何将本地的jar包打包进项⽬的war包?
按照1中配置完后编译没有问题,但是运⾏则报错,发现本地的lib并没有打包到war包中 WEB-INF/lib⽬录⾥,我们还需要在启动模块进⾏配置,这⾥即 module-a模块,如下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
maven打包本地jar包
<!-- 下⾯是为了将本地jar包打⼊WEB-INF/lib下⽽增加的配置-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<!-- 指向的是包含所有要⽤jar包的⽬录 -->
<directory>${basedir}/../libs</directory>
<!-- 编译后要把这些jar包复制到的位置 -->
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
这⾥需要配置两个地⽅
spring-boot-maven-plugin插件配置<includeSystemScope>true</includeSystemScope>
增加 maven-war-plugin插件,这⾥的<directory>也需要按照1中⽅法正确指向你的本地jar包所在的⽬录⾄此,便可以在spring-boot的war包中将本地的jar包打包进去从⽽顺利运⾏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。