Java 项目 — 五种创建方式
1. 普通 Java 项目(Plain / Standard Java Project)
用途
适合控制台工具、学习练习、算法、单文件或少量类的程序,不依赖 Web 容器或复杂构建工具。
典型目录结构
MyApp/
├─ src/
│ └─ com/example/app/
│ └─ Main.java
├─ lib/ (可选,第三方 jar)
├─ out/ (编译输出,可由 IDE 管理)
└─ README.md
如何创建
-
IDE(IntelliJ IDEA / Eclipse):New Project → Java → 指定 SDK → 新建 package & class。
-
CLI(手动):
mkdir MyApp && cd MyApp mkdir -p src/com/example/app # 创建 Main.java,之后手动编译运行
编译 / 运行
-
编译:
javac -d out src/com/example/app/Main.java -
运行:
java -cp out com.example.app.Main
依赖管理
-
手动把第三方 jar 放到
lib/,并在-cp中引用;或者使用简单的脚本来管理 classpath。 -
不推荐用于复杂依赖(依赖冲突、传递依赖),适合小型项目。
打包与部署
-
打成可执行 jar(带
MANIFEST.MF指定 Main-Class):jar cfm myapp.jar manifest.txt -C out . -
部署就是分发 jar。
优缺点
-
优点:简单、直接、轻量、学术/练手友好。
-
缺点:缺乏依赖管理、构建自动化差、难以扩展为大型项目。
2. Java Web 项目(Servlet/JSP,传统 Java Web)
用途
用于构建基于 Servlet/JSP 的网站或 Web 应用,运行在 Servlet 容器(如 Tomcat、Jetty)中。
典型目录结构(标准 WAR 结构)
MyWebApp/
├─ src/
│ └─ main/
│ └─ java/
│ └─ com/example/web/
│ └─ HelloServlet.java
├─ WebContent/ (或 webapp/)
│ ├─ WEB-INF/
│ │ ├─ web.xml
│ │ └─ lib/ (jar 放这里,部署时随 war 一起)
│ ├─ index.jsp
│ └─ static/
└─ build/ / dist/ (构建产物)
如何创建
-
IDE:New → Web Application project → 选择 Web SDK / Server(Tomcat),IDE 会生成
WEB-INF/web.xml。 -
CLI:手动组织目录并编写
web.xml,或者通过 Ant/手动打包成 war。
核心配置
WEB-INF/web.xml(简化示例)
<web-app><servlet><servlet-name>Hello</servlet-name><servlet-class>com.example.web.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>Hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
</web-app>
编译 / 打包 / 部署
-
将 class 编译到
WEB-INF/classes,第三方 jar 放WEB-INF/lib,然后打成myapp.war:jar -cvf myapp.war -C WebContent/ . -
部署:把
myapp.war放到 Tomcat 的webapps/下,Tomcat 自动展开并启动。
依赖管理
-
手动把 jar 放
WEB-INF/lib,或配合 Ant/Maven(见下一节)管理。
优缺点
-
优点:清晰的 Web 容器模型,部署(war)标准化。
-
缺点:样板代码多、配置繁琐(尤其在 web.xml 时代)、与现代微服务理念不太契合。
3. Maven 项目(标准 Maven Java 项目)
用途
使用 Maven 作为构建与依赖管理工具的 Java 应用(非 Web),适合中大型项目、需要标准化构建流程和依赖管理的场景。
典型目录结构(Maven 约定)
my-app/
├─ src/
│ ├─ main/
│ │ ├─ java/
│ │ └─ resources/
│ └─ test/
│ ├─ java/
│ └─ resources/
├─ pom.xml
└─ target/
如何创建
-
IDE:New → Project → Maven → 选择 archetype(或使用 IDE 向导)。
-
CLI(Maven must be installed):
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
关键文件:pom.xml(最小示例)
<project xmlns="http://maven.apache.org/POM/4.0.0"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-app</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>
</project>
构建 / 运行 / 测试
-
编译:
mvn compile -
测试:
mvn test -
打包 jar:
mvn package(生成target/my-app-1.0-SNAPSHOT.jar) -
运行:
java -jar target/my-app-1.0-SNAPSHOT.jar(若为可执行 jar,需配置插件创建可执行 jar)
依赖管理
-
通过
pom.xml声明依赖,Maven 负责下载、传递依赖、版本冲突解决(依赖树管理)。
优缺点
-
优点:成熟的依赖管理、插件生态、标准化构建。
-
缺点:初学门槛(pom 配置),某些复杂依赖冲突排查需要经验。
4. Maven Web 项目(Maven + Web,生成 WAR)
用途
把传统 Java Web 与 Maven 结合:用 Maven 管理依赖与构建,输出 war 包部署到容器。适合企业级传统 Web 应用。
典型目录结构(Maven Web)
my-webapp/
├─ src/
│ ├─ main/
│ │ ├─ java/
│ │ ├─ resources/
│ │ └─ webapp/
│ │ ├─ WEB-INF/
│ │ │ └─ web.xml
│ │ └─ index.jsp
│ └─ test/
├─ pom.xml
└─ target/
pom.xml 要点(war packaging)
<project>...<packaging>war</packaging><dependencies><!-- Servlet API 通常 scope 为 provided(由容器提供) --><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0</version><scope>provided</scope></dependency></dependencies>
</project>
如何创建
-
IDE:New → Maven → 选择 webapp archetype(如
maven-archetype-webapp)。 -
CLI:
mvn archetype:generate -DgroupId=com.example -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
构建 / 打包 / 部署
-
打包:
mvn package→target/my-webapp.war -
部署:将 war 部署到 Tomcat/Jetty 等容器。
优缺点
-
优点:结合 Maven 的依赖管理和插件,方便 CI/CD;可自动化测试与打包。
-
缺点:与微服务趋势相比略重;需要注意
provided依赖(容器提供的库)。
5. Spring Boot 项目(现代微服务/快速开发)
用途
基于 Spring 生态但极简配置的框架,适合开发独立运行的微服务或 web 应用(内嵌容器),快速启动生产级应用。
典型目录结构(Maven)
spring-boot-app/
├─ src/
│ ├─ main/
│ │ ├─ java/
│ │ │ └─ com/example/app/
│ │ │ └─ Application.java
│ │ └─ resources/
│ │ └─ application.properties
│ └─ test/
├─ pom.xml
└─ target/
如何创建
-
Spring Initializr(推荐):https://start.spring.io (在 IDE 中通常有向导)
-
IDE:New → Spring Initializr → 选择依赖(Web, JPA, Security 等)
-
CLI(Maven):使用
curl+ Initializr 或手动 archetype(一般用 Initializr)
核心示例代码
Application.java
package com.example.app;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
pom.xml(关键片段)
<project>...<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><!-- spring-boot-maven-plugin 用于打包可执行 jar --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
运行 / 打包
-
运行(开发):
mvn spring-boot:run或 直接运行Application.main()(IDE)。 -
打包:
mvn package→ 生成target/app-0.0.1-SNAPSHOT.jar(可执行,内嵌 Tomcat/Jetty)。 -
运行可执行 jar:
java -jar target/app-0.0.1-SNAPSHOT.jar
依赖管理
-
通过
pom.xml声明spring-boot-starter-*依赖,Starter 帮你拉取常用依赖并设置兼容版本。 -
Spring Boot 的
dependencyManagement(由 parent 管理)简化版本控制。
部署方式
-
直接部署可执行 jar 到服务器(推荐)。
-
如需外部容器,配置为
war并调整SpringBootServletInitializer,然后部署到 Tomcat(较少用)。
优缺点
-
优点:开箱即用、约定优于配置、starter 生态、适合微服务 + 容器化(Docker)、活跃社区。
-
缺点:启动包体积较大(内嵌容器),对“传统”Servlet-only 项目迁移可能需要调整。
对比速览(优选场景)
-
普通 Java 项目:小工具、学习、算法题、桌面/控制台应用。
-
Java Web 项目(非 Maven):传统 Web / 学习 Servlet/JSP(不推荐用于生产)。
-
Maven 项目(非 Web):标准化构建、复杂依赖、CI 集成的 Java 应用。
-
Maven Web 项目:传统企业 Web 应用(war)+Maven 管理依赖与构建。
-
Spring Boot 项目:现代微服务 / REST API / 快速开发,容器化友好。
常用命令小结
-
javac/java:原生编译与运行 -
mvn compile、mvn test、mvn package:Maven 基本生命周期命令 -
mvn spring-boot:run:运行 Spring Boot 项目 -
打包成 war:在
pom.xml中<packaging>war</packaging>,然后mvn package
小建议(工程实践)
-
新项目优先考虑 Maven/Gradle + Spring Boot(可维护、生态强)。
-
需要运行在传统容器、或与遗留系统集成时用 Maven Web (war)。
-
练习核心 Java 或学习语法时,使用 普通 Java 项目。
-
团队项目建议用版本控制、CI(GitHub Actions/Jenkins)、并使用构建工具(Maven/Gradle)统一构建。
-
为可移植性考虑,使用
application.properties/application.yml管理配置,避免写死环境变量。
