‘dependencies.dependency.systemPath‘ for *:*:jar must specify an absolute path but is

下面是一张模块与子模块的目录图

 kingdee\kingdee-biz\pom.xml依赖本地lib/k3cloud-webapi-sdk8.0.4.jar,配置如下:

        <!-- 金蝶云 api SDK包 -->
        <dependency>
            <groupId>com.kingdee</groupId>
            <artifactId>k3cloud-webapi</artifactId>
            <version>sdk8.0.4</version>
            <scope>system</scope>
            <systemPath>${project.parent.basedir}/lib/k3cloud-webapi-sdk8.0.4.jar</systemPath>
        </dependency>

pom.xml报错提示:

'dependencies.dependency.systemPath' for kingdee:kingdee:jar must specify an absolute path but is ${project.parent.basedir}/lib/k3cloud-webapi-sdk8.0.4.jar

意思是说:systemPath 只认识绝对路径,不认识相对路径。project.parent.basedir相对的是当前pom.xml上级。

现在如果把${project.parent.basedir} 换成${project.basedir},且/lib移到与当前pom.xml同一级的目录。错误不见了。

为什么会这样,如果我们打开kingdee-biz.iml就会发现两种变量在配置上的差别

1、使用${project.parent.basedir}变量时,有两种情况发生。

 情况一、如下图变量没有被转换,路径是无法识别的路径。会出现文中标题提示的错误

 情况二、变量已经转换为"$MODULE_DIR$/.."。相对当前目录通过../找上一级目录,也就是用的是相对路径。虽然pom.xml不会提示文中标题的错误,但当执行mvn命令时会出现“Process terminated”错误。

 2、使用${project.basedir}时,url是使用的是绝对目录。pom.xml不但不会提示文中标题的错误,且执行mvn命令时也不会出现“Process terminated”错误。

 总结:如果要使用systemPath 引用本地jar包,有三种方法:

1、写死绝对路径,如D://lib/k3cloud-webapi-sdk8.0.4.jar。

2、在settings.xml中配置变量,配置好绝对路径,然后使用这个变量。

3、如文中把lib/k3cloud-webapi-sdk8.0.4.jar与当前pom.xml放在同一级,然后用${project.basedir}/lib/k3cloud-webapi-sdk8.0.4.jar。

方法1、2的好处是jar包可以集中存放,不好的是换个环境可能需要换路径。

方法3的好处是可以用相对路径,不受环境变化影响。不好的是jar包不能集中存放。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值