所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

Java后端源码通常在哪个文件夹|主流项目结构核心位置详解

Java后端源码通常在哪个文件夹|主流项目结构核心位置详解 一

文章目录CloseOpen

这篇文章就帮你把这些“套路”掰碎了讲:从最基础的src/main/java核心目录(几乎所有规范项目的源码大本营),到Spring Boot中与配置文件、资源文件的配合布局,再到一些框架特有的小调整——比如MyBatis的Mapper文件和接口的对应位置,或者微服务项目中模块拆分后的源码结构。不管你是刚学Java后端想搭对项目结构,还是接手旧项目想快速定位源码,看完这篇都能“秒懂”各个文件夹的作用,再也不用对着目录树发愁啦。

你肯定遇到过这种情况:刚搭好Java后端项目,写了个HelloWorld类, run的时候却提示“找不到主类”;或者接手别人的旧项目,翻遍文件夹都找不到核心业务代码——其实不是你笨,是Java后端源码的存放位置藏着行业默认的“规矩”。我去年帮刚学Java的朋友调项目时,他把源码直接放在项目根目录下,结果Maven根本找不到编译的地方,我只用了一步就解决:把.java文件拖到src/main/java里,项目立马跑起来了。今天就把这些“规矩”拆碎了讲,你以后不管碰什么项目,都能像“找钥匙看玄关”一样,一秒定位源码。

为什么Java后端源码大多在src/main/java?因为“约定大于配置”是行业共识

我第一次接触Maven项目时,也好奇过:“为什么大家都把源码放src/main/java?就不能自己建个‘code’文件夹吗?”后来查了Apache Maven的官方文档(https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html rel=”nofollow”)才明白,这是构建工具的“约定大于配置”——简单说就是“大家都这么玩,工具也默认认这个位置,你不用自己瞎琢磨文件夹怎么建”。

比如Maven项目的标准结构是这样的:

  • src/main/java:放核心业务源码(比如Controller、Service、Dao层的类)
  • src/main/resources:放配置文件(比如application.properties、MyBatis的Mapper XML)
  • src/test/java:放测试源码(比如单元测试类)
  • target:构建后生成的.class文件和jar包都在这里
  • 为什么要这么分?举个例子:你写了个UserService类放在src/main/java里,Maven编译时会自动把这个类转换成.class文件,放到target/classes对应的包路径下;而你放在src/main/resources里的application.properties,会被直接复制到target/classes里——这样项目运行时,JVM能准确找到这些文件。如果把UserService放到“code”文件夹里,Maven根本不知道要编译这个文件夹里的内容,自然会提示“找不到类”。

    我之前踩过一个坑:接手一个遗留项目,前任开发把源码放到了src/java(少了main层级),结果用Maven打包时,编译出来的jar包里根本没有业务类,部署后直接报错“NoClassDefFoundError”。后来我把src/java改成src/main/java,再重新打包,问题立马解决。你看,遵守行业约定不是“教条”,是帮你避开前人踩过的坑

    再说说Gradle——现在很多新项目用Gradle代替Maven,但它的源码位置和Maven几乎一样,也是src/main/java放核心源码,src/test/java放测试源码。这就是行业共识:不管用什么构建工具,大家都默认“src/main/java是源码的家”,这样不同团队的人接手项目时,不用问别人“源码在哪”,直接找这个文件夹就行。

    Spring Boot项目里,源码位置还有哪些“小细节”要注意?

    很多Java后端项目都是基于Spring Boot开发的,它在Maven/Gradle的标准结构上做了一点扩展,比如更明确的资源文件划分,但核心源码位置还是src/main/java——不过你得注意这几个“小细节”,不然容易栽跟头:

  • Spring Boot的“源码+资源”配合:别把配置文件放错地方
  • Spring Boot项目里,src/main/java放的是Java类(比如@RestController标注的控制器、@Service标注的服务类),而src/main/resources放的是配置文件和静态资源:

  • application.properties/application.yml:项目的核心配置文件,比如数据库连接、端口号都在这里
  • static/:放静态文件(比如CSS、JS、图片)
  • templates/:放模板文件(比如Thymeleaf的.html文件)
  • 我之前帮同事排查过一个问题:他把application.yml放到了src/main/java里,结果项目启动时提示“Could not find config file”——因为Spring Boot默认会从src/main/resources里加载配置文件,你放错位置它根本找不到。记住:Java类归src/main/java,配置和资源归src/main/resources,别混在一起

  • MyBatis的“接口+XML”位置:要和包结构对应
  • 如果你用MyBatis做持久层,肯定遇到过“Mapper接口找不到对应的XML文件”的问题——其实问题出在“位置没对应”。按照MyBatis的约定:

  • Mapper接口要放在src/main/java里,比如com.example.dao.UserMapper
  • Mapper XML文件要放在src/main/resources里,路径要和接口的包结构一致,比如resources/com/example/dao/UserMapper.xml
  • 我之前写MyBatis代码时,把UserMapper.xml放到了resources/mapper文件夹里,结果启动时提示“BindingException: Invalid bound statement (not found)”——后来看了MyBatis的官方文档才知道,默认情况下,MyBatis会找“和接口同包路径”的XML文件,我把XML放错了位置,它当然找不到。后来我把XML文件移到resources/com/example/dao里,问题就解决了。

  • 微服务项目的“模块拆分”:每个服务都有自己的src/main/java
  • 现在很多后端项目用Spring Cloud做微服务拆分,比如把项目分成user-service(用户服务)、order-service(订单服务)、product-service(商品服务)三个模块——每个模块都是一个独立的Maven项目,所以每个模块都有自己的src/main/java文件夹:

  • user-service/src/main/java:放用户服务的源码(比如UserController、UserService)
  • order-service/src/main/java:放订单服务的源码(比如OrderController、OrderService)
  • 我去年做微服务项目时,刚开始把所有服务的源码都放到一个src/main/java里,结果包结构乱得像“垃圾堆”,找个类要翻十分钟。后来按照模块拆分,每个服务有自己的src/main/java,不仅找源码快了,构建的时候每个服务能单独打包,部署也更灵活。

    为了让你更清楚不同场景的源码位置,我做了个表格对比:

    场景 核心源码目录 资源文件目录
    普通Maven/Gradle项目 src/main/java src/main/resources
    Spring Boot项目 src/main/java src/main/resources(含static/templates)
    Spring Cloud微服务模块 user-service/src/main/java user-service/src/main/resources

    其实Java后端源码的位置真的不复杂——记住“src/main/java是核心,构建工具的约定要遵守,框架的扩展要注意”,你就能应付99%的场景。我再给你个“快速定位源码”的小技巧:不管打开什么Java项目,先找src文件夹,再进main/java,然后看包结构(比如com.example开头的包),核心业务代码肯定在里面。

    你最近有没有遇到“找不到源码”的问题?比如接手的项目源码位置很奇怪,或者自己建项目时放错了文件夹?评论区告诉我,我帮你分析分析——毕竟踩过坑的人,最懂怎么避坑~


    本文常见问题(FAQ)

    Java后端源码最常见的存放文件夹是哪个?

    几乎所有规范的Java后端项目,核心源码都放在src/main/java文件夹里——这是行业默认的“源码大本营”,不管用Maven还是Gradle构建工具,大家都认这个位置。

    比如你写的Controller、Service、Dao层类,或者Spring Boot的@RestController、@Service标注的类,都该放在这里,构建工具会自动编译这个文件夹里的代码。

    为什么Java后端源码大多放在src/main/java里?

    主要是因为“约定大于配置”的行业共识——构建工具(比如Maven、Gradle)默认会从这个文件夹读取源码进行编译,不用你手动配置“源码路径”,省得折腾。

    而且这样做能让不同团队的人接手项目时,不用问“源码在哪”,直接找src/main/java就行,减少沟通成本。我去年帮朋友调项目时,他把源码放根目录导致Maven找不到,拖到src/main/java里立马就好。

    Spring Boot项目里,Java源码和配置文件要分开放吗?

    要分开!Spring Boot项目的Java源码(比如控制器、服务类)放在src/main/java里,而配置文件(application.yml/properties)、静态资源(CSS/JS)、模板文件(Thymeleaf的.html)要放在src/main/resources里。

    比如你把application.yml放src/main/java里,Spring Boot根本找不到配置文件,会提示“Could not find config file”——记住“Java类归java文件夹,配置资源归resources文件夹”。

    用MyBatis时,Mapper接口和XML文件位置要对应吗?

    必须对应!MyBatis的Mapper接口要放在src/main/java的包路径下(比如com.example.dao.UserMapper),而Mapper XML文件要放在src/main/resources里,路径得和接口的包结构一致(比如resources/com/example/dao/UserMapper.xml)。

    我之前把XML放resources/mapper里,结果启动提示“Invalid bound statement”,后来调整路径对应上就好了——这是MyBatis的约定,不对应就找不到映射关系。

    Spring Cloud微服务项目的源码怎么放?

    Spring Cloud微服务是“模块化”结构,每个服务(比如user-service、order-service)都有自己的src/main/java文件夹。比如user-service的核心源码在user-service/src/main/java里,配置文件在user-service/src/main/resources里。

    这样每个模块独立,团队开发时不用互相干扰,接手某个服务时直接找对应模块的src/main/java就行,和单应用项目的逻辑一致。

    原文链接:https://www.mayiym.com/48592.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码