背景
主要是用到 maven 私服中没有的依赖,也不想配 nexus,想用本地依赖解决,但是用当把依赖放到父级模块的时候出现了如下错误。如果直接查搜索本地依赖配置,能查到正确的配法,但是如果按如下错误查询我是没有找到对应的解决方案,大模型也没问到,所以就记录下如何解决。
dependencies.dependency.systemPath' for com.zzz:child:jar must specify an absolute path but is ${project.parent.basedir}/lib/child.jar
相关maven变量介绍
{project.basedir} 当前工程的 pom.xml 所在目录
{project.parent.basedir} 当前工程的父级工程的 pom.xml 所在目录,一个 parent 表示一个父级
模块目录
my-project-parent
├── pom.xml
├── lib
│ ├── parent.jar
├── my-project-child
│ ├── pom.xml
│ └── src/
│ ├── lib
│ │ ├── child.jar
当前模块路径的本地依赖配置
此时假设 my-project-child 项目要引入 child.jar 这个本地依赖, pom.xml 配置如下即可
xml
<dependency>
<!-- groupId artifactId version 随意-->
<groupId>com.zzz</groupId>
<artifactId>child</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/child.jar</systemPath>
</dependency>
父级模块的本地依赖配置
如果 my-project-child 项目要引入 parent.jar 这个时候本地依赖,pom.xml按如下配置则会报错
xml
<dependency>
<!-- groupId artifactId version 随意-->
<groupId>com.zzz</groupId>
<artifactId>child</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.parent.basedir}/lib/child.jar</systemPath>
</dependency>
好像是因为 {project.parent.basedir} 是相对路径,systemPath 只能用绝对路径,而 {project.basedir} 是绝对路径。有点坑人,错误信息如下所示,
dependencies.dependency.systemPath' for com.zzz:child:jar must specify an absolute path but is ${project.parent.basedir}/lib/child.jar
正确的配法如下所示, 一个 /.. 表示当前模块的一层上级工程,如果有多层的话就多加几个 /..
xml
<dependency>
<!-- groupId artifactId version 随意-->
<groupId>com.zzz</groupId>
<artifactId>child</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/../lib/child.jar</systemPath>
</dependency>