Maven 项目和 Maven Web 项目的异同点

🧩 Maven 项目 vs Maven Web 项目 --- 全面对比总结

对比项 Maven 项目(普通 Maven Java 项目) Maven Web 项目(Maven + Web 应用)
项目用途 用于开发普通的 Java 应用程序(如控制台程序、工具、算法、后台服务等) 用于开发 Web 应用程序(运行在 Servlet 容器中,如 Tomcat、Jetty)
打包类型(packaging) jar(默认) war(需要指定)
构建结果 生成一个 .jar 生成一个 .war
运行方式 直接运行 jar(如:java -jar myapp.jar 需要部署到 Web 容器(Tomcat/Jetty)运行
目录结构(关键区别) 标准 Java 结构:\nsrc/main/java\nsrc/main/resources\nsrc/test/java\n 标准 Web 结构(多了 webapp):\nsrc/main/java\nsrc/main/resources\nsrc/main/webapp/WEB-INF/web.xml\n
是否有 Web 目录 ❌ 没有 webapp ✅ 有 src/main/webapp
是否需要 Web 容器运行 ❌ 不需要 ✅ 需要(Tomcat / Jetty 等)
是否包含 web.xml ❌ 无 ✅ 有(WEB-INF/web.xml 或注解配置)
依赖的 servlet API 不需要 需要添加 jakarta.servlet-apiscope=provided
项目 archetype(原型) maven-archetype-quickstart(默认 Java) maven-archetype-webapp(Web 原型)
运行示例 bash\nmvn compile\nmvn package\njava -jar target/myapp.jar\n bash\nmvn package\n# 生成 target/myapp.war\n# 部署到 Tomcat 的 webapps 目录\n
主要配置文件 pom.xml pom.xml + WEB-INF/web.xml
典型用途 后台逻辑、算法模块、工具包、SDK、API 客户端等 网站、管理系统、Web 接口、JSP/Servlet、SSM 框架等
依赖管理 Maven 负责 Maven 负责(加上 Web 特殊依赖)
开发框架常见组合 纯 Java、Spring(非 Web)、工具类库 SSM(Spring + SpringMVC + MyBatis)、JSP、Servlet、Spring Boot(打成 war)
部署方式 直接运行 jar 上传 war 到服务器的 Tomcat、Jetty、WebLogic 等容器中

📂 示例对比

✅ Maven 普通项目目录结构

复制代码
my-app/
├─ src/
│  ├─ main/java/com/example/
│  │  └─ App.java
│  └─ test/java/com/example/
│     └─ AppTest.java
├─ pom.xml
└─ target/

pom.xml(默认 jar)

复制代码
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <!-- 一般依赖 -->
  </dependencies>
</project>

打包后:target/my-app-1.0-SNAPSHOT.jar


✅ Maven Web 项目目录结构

复制代码
my-webapp/
├─ src/
│  ├─ main/
│  │  ├─ java/com/example/web/
│  │  │  └─ HelloServlet.java
│  │  ├─ resources/
│  │  └─ webapp/
│  │     ├─ WEB-INF/
│  │     │  └─ web.xml
│  │     └─ index.jsp
│  └─ test/java/
├─ pom.xml
└─ target/

pom.xml(打包为 war)

复制代码
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>my-webapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>5.0.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>

打包后:target/my-webapp.war

部署:把 war 文件放到 Tomcat/webapps/ 下运行。


🧱 Maven 项目 vs Maven Web 项目 --- 结构与流程对比图

一、项目结构对比

复制代码
📦 普通 Maven 项目(packaging: jar)
my-app/
├─ pom.xml                 ← 项目核心配置
├─ src/
│  ├─ main/
│  │  ├─ java/             ← 源码目录
│  │  │  └─ com/example/App.java
│  │  └─ resources/        ← 配置文件(如 log4j.properties)
│  └─ test/
│     ├─ java/             ← 单元测试代码
│     └─ resources/
└─ target/
   └─ my-app-1.0.jar       ← 输出的可执行 jar 包

📦 Maven Web 项目(packaging: war)
my-webapp/
├─ pom.xml                 ← 项目核心配置
├─ src/
│  ├─ main/
│  │  ├─ java/             ← 业务逻辑、Servlet 类
│  │  │  └─ com/example/web/HelloServlet.java
│  │  ├─ resources/        ← Spring/MyBatis 等配置文件
│  │  └─ webapp/           ← Web 根目录(HTML、JSP、静态资源)
│  │     ├─ index.jsp
│  │     └─ WEB-INF/
│  │        └─ web.xml     ← Web 应用描述符(Servlet 映射等)
│  └─ test/
│     └─ java/
└─ target/
   └─ my-webapp.war        ← 输出的 Web 应用 war 包

二、构建与运行流程对比

复制代码
flowchart TD
    subgraph A["普通 Maven 项目(jar)"]
      A1["1. 编写 Java 代码"] --> A2["2. mvn compile"]
      A2 --> A3["3. 生成 class 文件"]
      A3 --> A4["4. mvn package"]
      A4 --> A5["5. 生成 my-app.jar"]
      A5 --> A6["6. java -jar 运行"]
    end

    subgraph B["Maven Web 项目(war)"]
      B1["1. 编写 Servlet / JSP"] --> B2["2. mvn compile"]
      B2 --> B3["3. 生成 class 文件"]
      B3 --> B4["4. mvn package (war)"]
      B4 --> B5["5. 生成 my-webapp.war"]
      B5 --> B6["6. 部署到 Tomcat/webapps"]
      B6 --> B7["7. 浏览器访问 http://localhost:8080"]
    end

三、关键区别速记表

对比项 Maven 项目 Maven Web 项目
打包类型 jar war
输出产物 可执行 jar 文件 可部署的 war 包
是否含 Web 目录 ❌ 无 ✅ 有 src/main/webapp
是否需容器运行 ❌ 直接运行 ✅ Tomcat/Jetty
配置文件 pom.xml pom.xml + WEB-INF/web.xml
典型用途 工具类、SDK、后台服务 网站、SSM 项目、JSP/Servlet 应用
运行方式 java -jar 部署到 Tomcat
依赖 servlet-api 不需要 必需(scope=provided)

四、选型建议图

复制代码
想做什么? 👇

📘 写普通 Java 程序 / 工具?
→ ✅ 普通 Maven 项目(jar)

🌐 写 JSP / Servlet / SSM Web 系统?
→ ✅ Maven Web 项目(war)

🚀 想快速写 Web 接口 / 微服务?
→ ✅ Spring Boot 项目(jar,可直接运行)
相关推荐
摇滚侠3 小时前
Spring Boot3零基础教程,函数式 Web 新特性,笔记51
java·spring boot·笔记
mustfeng3 小时前
VCS & Verdi 2023安装
java·服务器·前端
Geoffrey4 小时前
maven中的pom详述
java
练习时长一年4 小时前
jdk动态代理实现
java·开发语言
爬山算法4 小时前
Redis(83)Redis的缓存击穿是什么?
java·redis·缓存
Elieal4 小时前
IDEA使用教程
java·ide·intellij-idea
执笔论英雄4 小时前
【大模型推理】ScheduleBatch 学习
java·spring boot·学习
CRMEB系统商城4 小时前
【新版发布】标准版PHP v5.6.4正式版,优化部分用户体验
java·大数据·小程序·php·ux
青云交4 小时前
Java 大视界 -- Java 大数据在智慧养老服务需求分析与个性化服务匹配中的应用
java·需求分析·智慧养老·健康管理·java 大数据·个性化服务·生活照料