You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Artifactory插件嵌套子项目File Specs路径匹配问题咨询

适配嵌套多模块Gradle项目的Jenkins Artifactory插件File Specs配置

我在Jenkins中使用Artifactory插件发布构件,项目采用Java+Gradle构建,构件按约定存放在build/libs/目录下。

平级多模块原有配置

平级多模块的项目结构如下:

root
|--proj1
|--proj2
|--...

此时使用如下File Specs配置可以正常完成发布(注:com.rivancic为Artifactory仓库的group值):

"files": [
  {
    "target": "test-repo/com/rivancic/{1}/1.0.0/{2}-1.0.0{3}",
    "pattern": "/home-dir/com/rivancic/(*)/build/libs/(*)-1.0.0(*)"
  }
]

上述配置中第一个通配符会被解析为proj1或proj2,构件会被上传到对应模块的路径下。

异常场景说明

当项目为包含嵌套子项目的多模块结构时,上述配置无法正常工作,项目结构示例如下:

root
|--proj1
   |--subproj11
   |--subproj12
|--proj2
|--...

使用原配置时,subproj11对应的第一个通配符会被解析为proj1/subproj11而非仅subproj11,导致生成的构件模块路径非法,Artifactory抛出如下异常:

java.lang.RuntimeException: java.io.IOException: Failed to deploy file. Status code: 409 Response message: Artifactory returned the following errors: 
The target deployment path 'com/rivancic/project1/subproject11/1.0.0/subproject11-1.0.0.pom' does not match the POM's expected path prefix 'com/rivancic/subproject11/1.0.0'. Please verify your POM content for correctness and make sure the source path is a valid Maven repository root path. Status code: 409

解决方案

可以结合**通配符和正则捕获规则,仅提取路径末尾的子模块名,修改后的File Specs配置如下:

"files": [
  {
    "target": "test-repo/com/rivancic/{1}/1.0.0/{2}-1.0.0{3}",
    "pattern": "/home-dir/com/rivancic/**/([^/]*)/build/libs/(*)-1.0.0(*)"
  }
]

规则说明

  • **是Artifactory File Specs原生支持的通配符,可以匹配任意多层子目录,会自动过滤掉proj1这类父级目录部分
  • ([^/]*)作为第一个捕获组,仅匹配不含斜杠的字符串,确保只能拿到build/libs/上级的最后一段目录名,也就是subproj11、subproj12、proj2这类实际的模块名
  • 后面两个捕获组的逻辑和原有配置完全一致,不需要额外调整

该配置同时兼容平级、嵌套两种多模块结构,不需要针对不同项目结构单独修改规则。

内容的提问来源于stack exchange,提问作者RenatoIvancic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:36:06