当前位置: 首页 > news >正文

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\nbash\nmvn package\n# 生成 target/myapp.war\n# 部署到 Tomcat 的 webapps 目录\n
主要配置文件pom.xmlpom.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 TDsubgraph 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 运行"]endsubgraph 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 项目
打包类型jarwar
输出产物可执行 jar 文件可部署的 war 包
是否含 Web 目录❌ 无✅ 有 src/main/webapp
是否需容器运行❌ 直接运行✅ Tomcat/Jetty
配置文件pom.xmlpom.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,可直接运行)
http://www.dtcms.com/a/529217.html

相关文章:

  • Maven整理
  • 关于OpenAI CLIP的综合技术报告:架构、对比预训练与多模态影响
  • 网上服装商城网站代码软件开发 网站建设
  • 保洁网站模板闲置物品交易网站怎么做
  • 11月更新|流程节点新增数据变更+发起流程
  • 【Swift】LeetCode 189. 轮转数组
  • 聊城网站托管网络舆情处置方案
  • C#的operator运算符定义
  • 南通网站建设论文网站上传用什么软件做视频格式
  • ftp备份网站wordpress进管理员密码
  • 【移动语义】C++ 移动语义的秘传心法
  • 网站营销的优势电商app系统开发公司
  • 电影wordpress福州搜索优化行业
  • 中国建设银行网站软件下载工厂招聘信息
  • 能耗在线监测系统助企业实时监测管理能耗,提升能源利用率
  • 怎么根据别人的网站做自己的网站片头制作网站
  • Python3 标准库概览
  • 从 Transformer 理论到文本分类:BERT 微调实战总结
  • 基于Python利用正则表达式将英文双引号 “ 替换为中文双引号 “”
  • rwqsd
  • 个人网站 建站前端网站优化
  • 【Linux】深入浅出 Linux 自动化构建:make 与 Makefile 的实用指南
  • 六安市城乡建设网站沧州百姓网免费发布信息网
  • 俱乐部网站php源码网站构建的工作
  • 【AI论文】机器人学习:教程
  • 普宁网站建设django做网站和js做网站
  • 物联网共享棋牌室:无人值守与24H营业下的轻量化运营实战!
  • Go Web 编程快速入门 07.3 - 模板(3):Action、函数与管道
  • 专业的培训行业网站制作北京网站建设一条龙
  • Spring Bean定义继承:配置复用的高效技巧