V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kyrre
V2EX  ›  Java

maven 多模块项目里模块间的依赖有什么最佳实践吗?

  •  
  •   kyrre · 2020-06-03 15:22:34 +08:00 · 3124 次点击
    这是一个创建于 1652 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在一个项目是个多 module 的 maven 项目。整个项目是一个 git repo 。 整个项目由多个服务 module 和对应的 api module 组成(每个服务 module 对应一个 api module )。 类似如下目录结构: <ROOT> api/ a-svc-api/ b-svc-api/ service/ a-svc/ b-svc/

    a-svc/里的 POM 文件已经加了对 a-svc-api 的依赖,如下:

    ...
            <dependency>
                <groupId>com.xxx.cloud</groupId>
                <artifactId>a-svc-api</artifactId>
                <version>${project.version}</version>
            </dependency>
    ...
    

    从 ROOT 目录下执行 mvn 打包所有的模块没有问题,能够在源码级解决依赖。

    现在我想如果只在一个服务 module 下打包时,能不能从源码层面解决依赖。

    因为 mvn package -f service/a-svc 时会试图从 maven 仓库下载 a-svc-api 这个包,如果提前 install 一把当然可以,但总觉得有点多此一举。

    6 条回复    2020-06-04 23:34:39 +08:00
    passerbytiny
        1
    passerbytiny  
       2020-06-03 15:48:01 +08:00 via Android
    根目录下:mvn package -pl 相对路径 /项目 id -am
    passerbytiny
        2
    passerbytiny  
       2020-06-03 15:51:24 +08:00 via Android
    这个相对路径,是 maven module 多层嵌套的相对路径,并不一定是文件结构上的(虽然二者一般都是一样的)
    312ybj
        3
    312ybj  
       2020-06-03 16:08:37 +08:00
    使用 Spring Boot Maven Plugin 插件
    https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/maven-plugin/usage.html
    可以避免从聚合项目重新打包
    kyrre
        4
    kyrre  
    OP
       2020-06-03 16:10:36 +08:00
    @passerbytiny 多谢指点,问题解决了。还是自己没看 mvn 的文档啊。
    hantsy
        5
    hantsy  
       2020-06-04 19:56:23 +08:00
    POM 处理父子关系有好几个情况,涉及 BOM,继承等,最近国外有大佬写的一个系列:

    https://cguntur.me/2020/05/20/understanding-apache-maven-the-series/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:25 · PVG 14:25 · LAX 22:25 · JFK 01:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.