背景:原本的微服务项目所有的服务都是以 Maven 模块化的结构来做的,就一个 git 仓库。现在为了 k8s 集群部署,就把服务拆分出去,每个服务一个单独的仓库。 问题:本地开发 IDEA 需要打开很多服务,之前只用开一个 IDEA ,批量启动,现在比之前麻烦了很多,想问问,大家有什么好的解决办法?

背景:原本的微服务项目所有的服务都是以 Maven 模块化的结构来做的,就一个 git 仓库。现在为了 k8s 集群部署,就把服务拆分出去,每个服务一个单独的仓库。 问题:本地开发 IDEA 需要打开很多服务,之前只用开一个 IDEA ,批量启动,现在比之前麻烦了很多,想问问,大家有什么好的解决办法?
1 ccw4wcc Feb 19, 2025 可以把所有的工程放到一个大文件夹底下,idea 直接打开这个大文件夹,每个子文件夹都可以有自己单独的 git |
2 lucasdev Feb 19, 2025 IDEA 去年刚支持的 workspace ,很好用: https://blog.jetbrains.com/zh-hans/idea/2024/09/workspaces-in-intellij-idea/ |
3 xuanbg Feb 19, 2025 怪不得很多人都对微服务架构抱有成见,认为微服务架构使系统更加复杂。。。OP 你们这个确实。。。我只能说微服务不是这么玩的呀。 一个正经的微服务,一般都是一个服务一个仓库。你要开发哪个服务就拉哪个仓库的代码。然后,开发微服务不需要你把整个系统代码都拉下来,然后在本地运行全部的服务。而是有一个公共的开发环境,上面运行全部的服务实例。你需要调试的话,把自己本地的 debug 模式运行的服务注册到开发环境,同时把开发环境的那个实例注销掉。这样,调用链路就能把请求打到你本地了进行调试了。 |
5 Dreamerwwr Feb 19, 2025 @xuanbg 这个不错,其实主要是环境配置上 |
6 imokkkk Feb 19, 2025 1 楼正解 |
7 Manley Feb 19, 2025 代码拉到一个目录下,用 IDEA 打开某个项目,右边栏 Maven 标签里,直接点加号把其他模块引进来就行 |
8 xuanbg Feb 19, 2025 @lscho 我们正常几乎没有本地 debug 的情况,有什么问题看日志就解决了。除非是日志中看不出来错误的原因,才会进 debug 模式跟跟看数据是不是正常。 |
9 Mrun Feb 19, 2025 @lscho #4 不会的,我司都是流量打标,不需要把开发环境的服务注销掉。在网关入口带上自定义的 header 头,就可以自动把流量导入到本地了。方便的很 |
10 clf Feb 19, 2025 @lucasdev 提问,workspace 是不是不支持不同 JDK 版本的微服务一起打开。我们现在在进行 JDK8 到 JDK17 升级,会存在两个版本的 JDK 并存。然后好像只能设置一个 JDK 版本。 |
11 clf Feb 19, 2025 @lucasdev 试了一下发现有些问题,比如 git 提交的时候,我同时改了 2 个项目,提交就会同时选择两个项目的内容。然后如果版本分支不一样的话,还不能用页面上的 git 随意切换。 |
12 Whiplash55 Feb 19, 2025 |
14 rockddd Feb 19, 2025 打开整个 workspace ,然后右边 maven 把项目都加进来 |
15 rb6221 Feb 19, 2025 换微服务了以后,正常情况下应该是不同的人负责不同的仓库,而不是一个人开发多个仓库代码,这才能体现拆分的好处来,你这样搞,优势没了,开发模式还是跟单体一样 感觉最根本的方法,分成多人开发模式,要么就恢复单体服务的架构。 |
16 leyfung OP @janus77 #15 是不同的人负责不同的服务,但是要远程调用 API ,要启动一些公共服务,比如 gateway 、auth 、system |
17 xuanbg Feb 19, 2025 @Whiplash55 我无法直接回答你的问题。 我认为微服务解决的是系统复杂度过高的问题。说到底,微服务就是一种对逻辑的封装模式而已。通过合理拆分服务,在服务层面实现高内聚低耦合、且正交的业务逻辑的封装。 当然,整体的复杂度并不因为服务拆分而降低。但很大一部分复杂度可以从开发转移到运维。所以,要玩微服务,先得有自动化运维的能力,不然肯定搞不定。 |
18 lucasdev Feb 19, 2025 @clf #11 1. 可以一起打开,JDK 是在 workspace 级别设置,在这里设置一个高版本的 JDK 。不同的 java.version 在各个服务的 pom.xml 中声明 2. Git 提交的时候,点那个眼睛图标,切换成 Group By Repository (默认是 Group By Directory) |
19 clf Feb 19, 2025 @lucasdev #18 1 的话估计不行,JDK17 和 JDK8 在 gradle 的兼容上不一样(对的,我们用的 gradle ),JDK17 用的 8.2 ,JDK8 用的 6.8 。如果得都兼容估计得看看有没有都支持的版本,全部都得改了。 |
20 Rat3 Feb 19, 2025 基建不行啊,开发单个微服务还得本地全给跑起来? |
22 potatowish Feb 19, 2025 via iPhone 开发环境注册要依赖的远程服务,注册中心禁止本地注册 |
25 JohnSwit Feb 19, 2025 @lucasdev #2 你好,问个问题,我试了一下,引入了多个项目,但是我们开发的分支都是不一致的,现在引进来后显示的分支都是 master ?这个如何处理,我想每个项目都显示现在所属的分支 |
26 awalkingman Feb 19, 2025 微服务的本质不是模块的拆分,而是组织架构的拆分。 |
27 HaibaraDP Feb 19, 2025 k8s 集群部署和一个 git 仓库 maven 多模块项目是哪里有冲突呢? |
28 lucasdev Feb 19, 2025 @JohnSwit 我试了一下是会同步各个 Project 的当前分支的。你选中某个 Project 中的一个文件,看显示的分支有没有变? 你也可以点击分支的那个下拉框,里面会列出各个 Project 的当前分支,实在不行的话可以在那里手动切换。 |
29 WashFreshFresh Feb 19, 2025 @JohnSwit 右下角可以选中单独的仓库切换分支 |
30 TofuBazinga Feb 19, 2025 请教一下微服务和拆 git 仓库有什么关系吗,要跑哪个服务,就打哪个 mudule 的镜像不就好了嘛,还是只是为了开发层面的解耦?不同团队维护不同服务,只负责自己的? |
31 sch1111878 Feb 19, 2025 @xuanbg 说的对 另外 1 楼说的也对 |
32 sch1111878 Feb 19, 2025 @Mrun 学习了学习了 |
33 freemoon Feb 19, 2025 go 里面不需要拆仓库,java 做不到?多问问。 |
34 fanjinzhongju952 Feb 19, 2025 @Mrun 这听起来像是字节 |
35 tangqiu0205 Feb 19, 2025 每次打开一个项目,选择附加就可以了。 |
36 Tsssss Feb 19, 2025 maven submodules? |
37 Plutooo Feb 19, 2025 #1 的做法就可以 |
38 L0L Feb 19, 2025 @xuanbg 针对这种公用环境场景,想再请教一个可能比较细节点的问题了?多人一起开发同一个服务时,是如何保障公用环境的 rpc 请求打到自己的服务节点上呢?因为公用服务的注册中心可能也是公用的情况。 |
41 xiaogu2014 Feb 19, 2025 理论上不需要多 git 项目。monorepo 可以搞定。参考 bazel 。 以及微服务不是指 repository 多个。是部署。每个里面可以指定不同的部署。 |
42 Vraw5 Feb 19, 2025 我们就是 Maven 模块化的结构,K8s 部署没影响,修改哪个模块就打哪个模块的包部署 |
43 LowBi Feb 19, 2025 via iPhone 我一个服务开一个 idea 窗口不用就关掉 |
44 wtsm Feb 19, 2025 via Android 感觉微服务累死,feign 接口写累死 |
46 prosgtsr Feb 19, 2025 File -> new -> Module from Existing Sources... 不谢,我就是这么开发的。我一打开就是二三十个微务,下次只要用 idea 打开同一个地方,还是这二三十个微服务一起打开了 |
47 thevita Feb 19, 2025 我怎么感觉 “现在为了 k8s 集群部署,就把服务拆分出去,每个服务一个单独的仓库。” 这里槽点最大啊 代码组织方式应该是服务于开发团队的协作方式的,而不是紧急为了在 k8s 上部署(就是所有代码都在一个仓库里也不是就不能在 k8s 上部署了啊,无非就是 google 搜不到而已..,看不懂)就这么大动干戈的让所有人去适配机器,,, |
48 leyfung OP @TofuBazinga #30 一个是为了部署,都放在一个项目里面,属于 Maven 模块化工程,打包的时候,会打包所有的,拆出来,就可以独立打包,构建镜像、部署。二是为了解耦,每个服务不同的组在开发。 |
49 BinCats Mar 6, 2025 不需要的都打 Maven 包就好了啊 |