Java 项目结构规范
良好的项目结构是软件开发的基础。理解标准的项目结构规范有助于团队协作和项目维护。本章将详细介绍 Java 项目的标准结构。
Maven 标准目录结构
Maven 目录结构
Maven 标准目录结构是 Java 项目最常用的结构。
project-root/
├── pom.xml # Maven 配置文件
├── src/
│ ├── main/
│ │ ├── java/ # 主代码目录
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── App.java
│ │ ├── resources/ # 资源文件目录
│ │ │ ├── application.properties
│ │ │ └── log4j.xml
│ │ └── webapp/ # Web 应用资源(如果适用)
│ │ └── WEB-INF/
│ └── test/
│ ├── java/ # 测试代码目录
│ │ └── com/
│ │ └── example/
│ │ └── AppTest.java
│ └── resources/ # 测试资源文件
│ └── test-config.properties
└── target/ # 编译输出目录(自动生成)
├── classes/
└── test-classes/
目录说明
主要目录:
src/main/java:主源代码目录src/main/resources:主资源文件目录src/test/java:测试源代码目录src/test/resources:测试资源文件目录target:编译输出目录(Maven 自动生成)
src/main/java / src/test/java
主代码目录(src/main/java)
**src/main/java**存放项目的主要源代码。
包结构示例:
src/main/java/
└── com/
└── example/
└── myapp/
├── Main.java # 主类
├── model/ # 数据模型
│ ├── User.java
│ └── Product.java
├── service/ # 业务逻辑
│ ├── UserService.java
│ └── ProductService.java
├── dao/ # 数据访问
│ ├── UserDao.java
│ └── ProductDao.java
├── controller/ # 控制器(Web 应用)
│ └── UserController.java
├── util/ # 工具类
│ └── StringUtils.java
└── config/ # 配置类
└── AppConfig.java
测试代码目录(src/test/java)
**src/test/java**存放测试代码,结构与主代码对应。
src/test/java/
└── com/
└── example/
└── myapp/
├── service/
│ ├── UserServiceTest.java
│ └── ProductServiceTest.java
├── dao/
│ └── UserDaoTest.java
└── util/
└── StringUtilsTest.java
包命名规范
包命名规则:
- 使用小写字母
- 使用域名倒序(如
com.example.myapp) - 多个单词用点分隔
- 避免使用 Java 关键字
// ✅ 正确
package com.example.myapp.service;
package org.apache.commons.lang3;
// ❌ 错误
package com.example.MyApp; // 包含大写
package com.example.class; // 使用关键字
资源文件与配置文件
资源文件目录(src/main/resources)
**src/main/resources**存放资源文件,编译时会被复制到 classpath。
常见资源文件:
src/main/resources/
├── application.properties # 应用配置
├── application.yml # YAML 配置
├── log4j2.xml # 日志配置
├── db.properties # 数据库配置
├── messages.properties # 国际化资源
├── spring/
│ └── applicationContext.xml # Spring 配置
└── static/ # 静态资源
├── css/
├── js/
└── images/
配置文件示例
application.properties:
# 数据库配置
db.url=jdbc:mysql://localhost:3306/mydb
db.username=root
db.password=password
# 应用配置
app.name=My Application
app.version=1.0.0
# 日志配置
logging.level.root=INFO
logging.level.com.example=DEBUG
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>