项目文件夹叫codeedge-backend,Java包名是codeedgebackend,Maven的artifactId是codeedge-backend,Spring配置里还有个spring.application.name叫codeedge-backend。
这几个到底有啥区别?必须要对上吗?
其实,这几个是完全不同维度、不同作用、没有任何强制绑定关系的配置,给谁用、管什么、能不能乱改,差别还是挺大的。
我就用 codeedge-backend 项目当例子,先从最核心、最容易踩语法坑的 Java 包名说起。
Java包名 com.codeedgexu.codeedgebackend
这是Java语言强制规范的代码组织方式,是给Java编译器、JVM、Spring Boot看的,用来唯一标识代码类,和项目功能强绑定。
作用
- 唯一标识代码类,避免重名冲突
你的controller、config、service这些类,全在com.codeedgexu.codeedgebackend这个包下面。
Java编译器靠【包名+类名】唯一确定一个类,比如你的启动类全限定名是com.codeedgexu.codeedgebackend.CodeEdgeBackendApplication,这个名字全局唯一,不会和别人的项目重名冲突。
- 决定Spring Boot的Bean扫描范围
Spring Boot启动的时候,默认只会扫描启动类所在的包以及它的子包。
比如你的启动类在com.codeedgexu.codeedgebackend下面,那它只会扫这个包下面的controller、service,把它们注册成Bean。
如果改了代码的包名,但启动类没跟着搬到新包,Spring 就扫不到新包里的 controller、service 这些类,导致这些类不会被注册成 Bean,项目启动失败。
小贴士
- Java包名里,绝对不能用横杠
-。
因为横杠在Java里是减号运算符,不能出现在包名、类名、变量名里,编译器会直接报错。
这也是为什么我文件夹名可以叫codeedge-backend,但包名必须写成codeedgebackend的根本原因——不是我不想写一样的,是Java语法不允许。
- Java包名的所有部分必须全小写。
这是Java的行业通用规范,虽然语法允许大写,但不专业,且很多代码规范检查工具会报错。
Maven artifactId codeedge-backend
这是Maven项目的唯一标识,在同一个groupId下必须唯一,用来在Maven仓库里找到你的项目、打包发布、管理依赖。
作用
- 唯一标识你的Maven项目,和别人的项目区分开;
- 项目打包、发布到Maven仓库,全靠这个artifactId;
- 以后别人要引用你的项目,就是靠这个artifactId写依赖:
|
|
小贴士
上线后如果修改了 artifactId,项目打包出来的jar包名字会变,别人引用你的项目也要同步改artifactId,不然就找不到依赖。
推荐用kebab-case短横线分隔的格式(比如codeedge-backend),可读性好,Maven全兼容,是行业里90%的项目都会用的写法。
application.yml文件中的codeedge-backend
|
|
这是Spring Boot应用的官方服务名,核心作用是给微服务注册中心(Nacos)看的,是你这个服务在微服务集群里的唯一标识。
作用
- Nacos服务注册的唯一标识
你的服务启动时,会去Nacos登记,登记的名字就是这个spring.application.name;
- 微服务之间调用的标识
以后有其他服务要调用你的接口,就是靠这个名字在Nacos里找到你的服务地址;
小贴士
同样地,上线后如果修改了这个服务名,Nacos里注册的服务名就变了,其他服务再用旧名字找你,就完全找不到了,微服务调用直接报错。
推荐和Maven的artifactId保持一致(比如也叫codeedge-backend),这样你在看Nacos控制台的时候,一眼就能对应上“这个服务对应Maven里的哪个项目”,不会混乱。