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

2020-06-03 15:22:34 +08:00
 kyrre

现在一个项目是个多 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 一把当然可以,但总觉得有点多此一举。

2984 次点击
所在节点    Java
6 条回复
passerbytiny
2020-06-03 15:48:01 +08:00
根目录下:mvn package -pl 相对路径 /项目 id -am
passerbytiny
2020-06-03 15:51:24 +08:00
这个相对路径,是 maven module 多层嵌套的相对路径,并不一定是文件结构上的(虽然二者一般都是一样的)
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
2020-06-03 16:10:36 +08:00
@passerbytiny 多谢指点,问题解决了。还是自己没看 mvn 的文档啊。
hantsy
2020-06-04 19:56:23 +08:00
POM 处理父子关系有好几个情况,涉及 BOM,继承等,最近国外有大佬写的一个系列:

https://cguntur.me/2020/05/20/understanding-apache-maven-the-series/
EastLord
2020-06-04 23:34:39 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/678268

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX