用 Gitlab CI/CD 在 gitlab 私服仓库发布 maven 包,为什么子项目 pom 文件里的<repositories>属性没有继承父项目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Emilyan
V2EX    Java

用 Gitlab CI/CD 在 gitlab 私服仓库发布 maven 包,为什么子项目 pom 文件里的<repositories>属性没有继承父项目

  •  
  •   Emilyan 2023 年 7 月 19 日 1833 次点击
    这是一个创建于 915 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个父项目 XXparent, 子项目 xx-commonlib 要用流水线发布到公司的 gitlab 私服,script 命令 mvn deploy -s ci_settings.xml

    父项目的 pom 中添加了仓库和部署仓库的地址

    <repositories> <repository> <id>gitlab-maven</id> <url>https://sample-gitlab/api/v4/projects/20/packages/maven</url> </repository> </repositories> <distributionManagement> <repository> <id>gitlab-maven</id> <url>https://sample-gitlab/api/v4/projects/20/packages/maven</url> </repository> <snapshotRepository> <id>gitlab-maven</id> <url>https://sample-gitlab/api/v4/projects/20/packages/maven</url> </snapshotRepository> </distributionManagement> 

    子项目 xx-commonlib 的 pom 中继承父项目,没有添加相关仓库的配置

    <parent> <groupId>xx.xx.xx</groupId> <artifactId>xx-parent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath/> </parent>

    向 gitlab 推送代码,CI/CD 自动发布后,父项目 xx-parent 可以正常发布到 gitlab 的 maven 私服仓库上,子项目 xx-commonlib 报错

    Non-resolvable parent POM for xx.xx.xx:xx-commonlib:1.0.0-SNAPSHOT: Could not find artifact xx.xx.xx:xx-parent:pom:1.0.0-SNAPSHOT and 'parent.relativePath' points at no local POM @ line 6, column 13

    必须在子项目 xx-commonlib 的 pom 中添加

    <repositories> <repository> <id>gitlab-maven</id> <url>https://sample-gitlab/api/v4/projects/20/packages/maven</url> </repository> </repositories>

    后子项目才可以正常发布到仓库。

    我的疑问是为什么子项目没有继承父项目的<repositories>仓库配置,但是可以继承<distributionManagement>部署仓库配置。 因为这个父项目下面有不少子项目,如果每个子项目的 pom 文件里都要写一遍 repositories 地址的话可能比较麻烦。

    stackflow 上有个类似的问题,好像没有正确的答案 https://stackoverflow.com/questions/69570730/maven-child-modules-not-inheriting-repository-tags

    9 条回复    2023-07-31 10:03:45 +08:00
    vantis
        1
    vantis  
       2023 年 7 月 19 日
    子项目的 parent.relativePath 配对了吗 这个报错应该是没找到父项目 自然无从继承
    所以首先要通过相对路径找到本地的父项目 才能继承父项目的配置
    Emilyan
        2
    Emilyan  
    OP
       2023 年 7 月 20 日
    @vantis
    就是<relativePath/>
    强制从仓库里寻找父项目
    vantis
        3
    vantis  
       2023 年 7 月 20 日
    @Emilyan #2 不设置 relativePath 子项目就强制去仓库里找项目这时的仓库是谁呢?因为本配置没有 父级又找不到 自然是用你机器上的 settings 配置了
    所以应该指定 relativePath 为../pom.xml 让子项目先根据相对路径去找到父级 就能继承父级的配置了 repositories, distributionManagement 等等配置也会继承到
    vantis
        4
    vantis  
       2023 年 7 月 20 日
    可以参考
    https://www.baeldung.com/maven-relativepath
    baeldung 的文章质量不错的
    Emilyan
        5
    Emilyan  
    OP
       2023 年 7 月 21 日
    @vantis 谢谢热心回复,测试了一下还是'parent.relativePath' points at no local POM 错误。
    这是把 maven 包 deploy 到 Gitlab-CI 发布到公司私服,不是我机器上。而且在设置<relativePath>为空的情况下,
    <distributionManagement>是成功继承的,就是继承不了<repositories>配置
    vantis
        6
    vantis  
       2023 年 7 月 22 日
    @Emilyan #5 子项目不是随父项目一起打包的吗?如果是通过父项目下执行 mvn deploy 没有特殊配置的话 父子项目都会 deploy 的
    我是不是可以理解你拆成两个项目了?
    Emilyan
        7
    Emilyan  
    OP
       2023 年 7 月 24 日
    @vantis 确实是拆成两个项目,路径上是平级的。父项目只是做依赖管理。
    ikas
        8
    ikas  
       2023 年 7 月 29 日
    你是在子项目运行 mvn 命令的吧...
    Emilyan
        9
    Emilyan  
    OP
       2023 年 7 月 31 日
    @ikas 是的,但是父项目已经发布到 gitlab package registry 仓库了啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5382 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 07:46 PVG 15:46 LAX 23:46 JFK 02:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86