<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Maven on Coder_Studio</title>
        <link>https://iamxurulin.github.io/tags/maven/</link>
        <description>Recent content in Maven on Coder_Studio</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>iamxurulin</copyright>
        <lastBuildDate>Sun, 05 Apr 2026 17:35:33 +0000</lastBuildDate><atom:link href="https://iamxurulin.github.io/tags/maven/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>一篇搞懂：Java包名、Maven artifactId、Spring application.name到底有啥区别？</title>
        <link>https://iamxurulin.github.io/p/%E4%B8%80%E7%AF%87%E6%90%9E%E6%87%82java%E5%8C%85%E5%90%8Dmaven-artifactidspring-application.name%E5%88%B0%E5%BA%95%E6%9C%89%E5%95%A5%E5%8C%BA%E5%88%AB/</link>
        <pubDate>Fri, 27 Mar 2026 21:33:09 +0000</pubDate>
        
        <guid>https://iamxurulin.github.io/p/%E4%B8%80%E7%AF%87%E6%90%9E%E6%87%82java%E5%8C%85%E5%90%8Dmaven-artifactidspring-application.name%E5%88%B0%E5%BA%95%E6%9C%89%E5%95%A5%E5%8C%BA%E5%88%AB/</guid>
        <description>&lt;p&gt;项目文件夹叫&lt;code&gt;codeedge-backend&lt;/code&gt;，Java包名是&lt;code&gt;codeedgebackend&lt;/code&gt;，Maven的&lt;code&gt;artifactId&lt;/code&gt;是&lt;code&gt;codeedge-backend&lt;/code&gt;，Spring配置里还有个&lt;code&gt;spring.application.name&lt;/code&gt;叫&lt;code&gt;codeedge-backend&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这几个到底有啥区别？必须要对上吗？&lt;/p&gt;
&lt;p&gt;其实，这几个是完全不同维度、不同作用、没有任何强制绑定关系的配置，给谁用、管什么、能不能乱改，差别还是挺大的。&lt;/p&gt;
&lt;p&gt;我就用 &lt;code&gt;codeedge-backend&lt;/code&gt; 项目当例子，先从最核心、最容易踩语法坑的 Java 包名说起。&lt;/p&gt;
&lt;h2 id=&#34;java包名-comcodeedgexucodeedgebackend&#34;&gt;Java包名 &lt;code&gt;com.codeedgexu.codeedgebackend&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;这是Java语言强制规范的代码组织方式，是给Java编译器、JVM、Spring Boot看的，用来唯一标识代码类，和项目功能强绑定。&lt;/p&gt;
&lt;h3 id=&#34;作用&#34;&gt;作用
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;唯一标识代码类，避免重名冲突&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;你的&lt;code&gt;controller&lt;/code&gt;、&lt;code&gt;config&lt;/code&gt;、&lt;code&gt;service&lt;/code&gt;这些类，全在&lt;code&gt;com.codeedgexu.codeedgebackend&lt;/code&gt;这个包下面。&lt;/p&gt;
&lt;p&gt;Java编译器靠【包名+类名】唯一确定一个类，比如你的启动类全限定名是&lt;code&gt;com.codeedgexu.codeedgebackend.CodeEdgeBackendApplication&lt;/code&gt;，这个名字全局唯一，不会和别人的项目重名冲突。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;决定Spring Boot的Bean扫描范围&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Spring Boot启动的时候，默认只会扫描启动类所在的包以及它的子包。&lt;/p&gt;
&lt;p&gt;比如你的启动类在&lt;code&gt;com.codeedgexu.codeedgebackend&lt;/code&gt;下面，那它只会扫这个包下面的&lt;code&gt;controller&lt;/code&gt;、&lt;code&gt;service&lt;/code&gt;，把它们注册成Bean。&lt;/p&gt;
&lt;p&gt;如果改了代码的包名，但启动类没跟着搬到新包，Spring 就扫不到新包里的 controller、service 这些类，导致这些类不会被注册成 Bean，项目启动失败。&lt;/p&gt;
&lt;h3 id=&#34;小贴士&#34;&gt;小贴士
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Java包名里，绝对不能用横杠&lt;code&gt;-&lt;/code&gt;&lt;strong&gt;。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;因为横杠在Java里是减号运算符，不能出现在包名、类名、变量名里，编译器会直接报错。&lt;/p&gt;
&lt;p&gt;这也是为什么我文件夹名可以叫&lt;code&gt;codeedge-backend&lt;/code&gt;，但包名必须写成&lt;code&gt;codeedgebackend&lt;/code&gt;的根本原因——不是我不想写一样的，是Java语法不允许。&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Java包名的所有部分必须全小写。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这是Java的行业通用规范，虽然语法允许大写，但不专业，且很多代码规范检查工具会报错。&lt;/p&gt;
&lt;h2 id=&#34;maven-artifactid-codeedge-backend&#34;&gt;Maven artifactId &lt;code&gt;codeedge-backend&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;这是Maven项目的唯一标识，在同一个&lt;code&gt;groupId&lt;/code&gt;下必须唯一，用来在Maven仓库里找到你的项目、打包发布、管理依赖。&lt;/p&gt;
&lt;h3 id=&#34;作用-1&#34;&gt;作用
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;唯一标识你的Maven项目，和别人的项目区分开；&lt;/li&gt;
&lt;li&gt;项目打包、发布到Maven仓库，全靠这个artifactId；&lt;/li&gt;
&lt;li&gt;以后别人要引用你的项目，就是靠这个artifactId写依赖：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.codeedgexu&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;codeedge-backend&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;0.0.1-SNAPSHOT&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;小贴士-1&#34;&gt;小贴士
&lt;/h3&gt;&lt;p&gt;上线后如果修改了 &lt;code&gt;artifactId&lt;/code&gt;，项目打包出来的jar包名字会变，别人引用你的项目也要同步改artifactId，不然就找不到依赖。&lt;/p&gt;
&lt;p&gt;推荐用&lt;code&gt;kebab-case&lt;/code&gt;短横线分隔的格式（比如&lt;code&gt;codeedge-backend&lt;/code&gt;），可读性好，Maven全兼容，是行业里90%的项目都会用的写法。&lt;/p&gt;
&lt;h2 id=&#34;applicationyml文件中的codeedge-backend&#34;&gt;&lt;code&gt;application.yml&lt;/code&gt;文件中的&lt;code&gt;codeedge-backend&lt;/code&gt;
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;spring&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;application&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;codeedge-backend&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这是Spring Boot应用的官方服务名，核心作用是给微服务注册中心（Nacos）看的，是你这个服务在微服务集群里的唯一标识。&lt;/p&gt;
&lt;h3 id=&#34;作用-2&#34;&gt;作用
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Nacos服务注册的唯一标识&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;你的服务启动时，会去Nacos登记，登记的名字就是这个&lt;code&gt;spring.application.name&lt;/code&gt;；&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;微服务之间调用的标识&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以后有其他服务要调用你的接口，就是靠这个名字在Nacos里找到你的服务地址；&lt;/p&gt;
&lt;h3 id=&#34;小贴士-2&#34;&gt;小贴士
&lt;/h3&gt;&lt;p&gt;同样地，上线后如果修改了这个服务名，Nacos里注册的服务名就变了，其他服务再用旧名字找你，就完全找不到了，微服务调用直接报错。&lt;/p&gt;
&lt;p&gt;推荐和Maven的&lt;code&gt;artifactId&lt;/code&gt;保持一致（比如也叫&lt;code&gt;codeedge-backend&lt;/code&gt;），这样你在看Nacos控制台的时候，一眼就能对应上“这个服务对应Maven里的哪个项目”，不会混乱。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
