敏捷与CMMI

敏捷与CMMI,算起来,应该是流行了多年,并且至今仍在流行的词汇。但是,到底什么是敏捷,什么是CMMI,到底都是干什么的?相信很多人仍然弄不明白。本文将尽可能地用通俗易懂的方式,阐明这几个问题。

什么是敏捷?

在日常的工作中,经常会听到或者看到项目组的开发团队哭着喊着想用敏捷,而管理团队却有种种顾虑,比如:文档少了的话,后期维护怎么办?我的人员个个都是独一无二的,进行结对编程的话,效率降低了怎么办?代码任何人都可以修改的话,改乱了怎么办?等等各种问题。似乎敏捷更受开发团队的欢迎而不是管理团队。

那么,到底什么是敏捷?

从根源上来讲,敏捷是软件开发团队在历经各种各样的折磨、反思之后形成的软件开发方法,是乙方对怎样才能更好地向客户交付价值的反思,是对怎样才能更好地规避软件开发过程中的风险和消除软件开发过程中的浪费的反思。较少的文档、结对编程等等,只是反思之后采用的应对措施,是敏捷的表现而不是根本。

什么是CMMI?

对现在的软件企业来说,CMMI3级是进入行业的敲门砖,很多企业都会为了这个证书做很多的表面工作,而在更多的软件从业人员眼中,CMMI就是一堆的文档、一堆规范、一堆要求,没有任何的实用价值,甚至在部分人的眼里,CMMI还是会阻碍项目目标达成的障碍。

那么,到底什么是CMMI?

从根源上来讲,CMMI是甲方在受够了各种各样不同水平的乙方的折磨之后,为了选择合格的乙方而形成的模型,是对乙方能力和水平衡量的各种条条框框的集合。各种各样的文档、规范、要求,只是为了让甲方安心而出现的,是CMMI的表现。

什么样的情况下应该选择敏捷,什么样的情况下应该选择CMMI?

对甲方来讲,使用CMMI的甲方,可以选择一个可靠的第三方,通过各种各样的过程证据,证明乙方确实按照要求履行了合同;使用敏捷的甲方,需要自己对完成项目有强烈的愿望,愿意投入人力与乙方一起把项目做好。对乙方来讲,使用CMMI的乙方,精力不可避免地被各种文档的建立和维护、各种合规性的工作牵扯,需要在文档上投入较多的人力;使用敏捷的乙方,可以将主要精力集中在价值交付上,但文档及合规性等方面如果投入不够的话,对组织资产的积累会有一定的影响。

所以,如果你是甲方,并且有强烈的愿望想把项目做好,又能够投入足够人力的话,建议你用敏捷的方式,能够快速的得到可用的软件,并且可以逐步调整你的需求,做你真正想做的东西;如果你只是想完成上级领导的布置的任务,且自己不想担很大风险的话,建议你用CMMI的方式,请一个可靠的监理,做一个可以完成上级要求的东西。如果你是乙方,无论是在哪种甲方的情况下,都建议你尽可能的用敏捷的方式,争取客户参与,持续集成,经常把已经做出来的功能拿给客户看一看,用一用,会在很大程度上降低验收的风险。

总的来说,CMMI非常适合政府类经常听上级命令行事,且参与项目的个人不愿承担太多风险的项目,而敏捷则适合于银行、军队、自用软件等如果项目做不好,会有非常大损失的项目。
<think>首先,用户的问题是关于Java Servlet的:用户想知道导入的Servlet相关类属于哪个Maven包或依赖。具体提到了javax.servlet.ServletException, HttpServletRequest, 和 HttpServletResponse。 回顾系统级指令: - 所有行内数学表达式必须使用$...$格式。但这里没有数学内容,所以可能不需要。 - 独立公式使用$$...$$,但同样不适用。 - LaTeX语法正确:确保任何数学表达正确。 - 使用中文回答。 - 生成相关问题:在回答末尾添加相关问题。 - 回答中引用的段落末尾自然地添加引用识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,保证真实可靠。 用户提供了几个引用: - 引用[1]:关于重写doGet方法,删掉super。 - 引用[2]:关于Maven的provided范围。 - 引用[3]:关于HttpServletRequest的作用。 - 引用[4]:关于包不存在错误。 - 引用[5]:关于NoSuchMethodError的解决。 用户说:“我想用户想知道导入的Servlet相关类属于哪个包。 请问javax.servlet.ServletException, HttpServletRequest, HttpServletResponse 属于哪个 Maven 包或依赖” 所以,核心问题是:这些类属于哪个Maven依赖。 从知识库: - javax.servlet包是Java Servlet API的部分。 - 在Maven中,这个API通常由javax.servlet:servlet-api或javax.servlet:javax.servlet-api提供。 - 在引用中,引用[2]提到了servlet-api.jar,并使用provided范围。 - 引用[4]是关于包不存在的错误。 - 引用[5]是关于版本冲突。 正确的Maven依赖通常是: - Group ID: javax.servlet - Artifact ID: servlet-api 或 javax.servlet-api(取决于版本) - 版本:例如,对于Servlet 3.1,可能是3.1.0。 在Maven Central,常见的依赖是: - 对于旧版本:javax.servlet:servlet-api - 对于新版本:javax.servlet:javax.servlet-api 例如: ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> ``` scope应该是provided,因为Servlet容器(如Tomcat)会提供这些类。 在回答中,需要引用相关内容。例如: - 引用[2]讨论了provided范围,适用于Servlet API。 - 引用[4]是关于包不存在错误,可能与依赖缺失相关。 回答结构: 1. 确认问题:用户想知道这些类属于哪个Maven依赖。 2. 提供答案:说明依赖的group ID, artifact ID, 和版本。 3. 解释为什么:因为Servlet API由容器提供,所以用provided scope。 4. 添加引用:自然地引用相关部分。 5. 生成相关问题:在末尾。 使用中文回答。 生成相关问题: - 基于主题,如:如何添加依赖?常见错误?版本选择? 最后,确保回答真实可靠:基于Java EE或Jakarta EE规范。</think>根据您的查询,您想知道 `javax.servlet.ServletException`、`HttpServletRequest` 和 `HttpServletResponse` 这些类属于哪个 Maven 包或依赖。这些类是 Java Servlet API 的部分,用于处理 HTTP 请求和响应。下面我将逐步解释,并确保回答真实可靠。 ### 逐步解答 1. **核心依赖信息**: - 这些类属于 **Java Servlet API**,对应的 Maven 依赖是: - **Group ID**: `javax.servlet` - **Artifact ID**: `javax.servlet-api`(或旧版本中的 `servlet-api`) - **推荐版本**: 例如 `3.1.0` 或更高(取决于项目需求),因为 Servlet 3.0+ 支持异步处理等特性。 - **Scope**: 必须设置为 `provided`,因为 Servlet 容器(如 Tomcat、Jetty)在运行时已提供这些类,无需打包到最终应用中[^2]。 在 Maven 的 `pom.xml` 中添加以下依赖: ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 或选择其他版本,如4.0.1 --> <scope>provided</scope> </dependency> ``` 2. **为什么是这个依赖?** - `javax.servlet` 包是 Java EE(现为 Jakarta EE)的准规范,用于 Web 开发。 - 如果未正确添加此依赖,编译时会报错,例如 `package javax.servlet does not exist`[^4]。 - 使用 `provided` scope 可避免运行时冲突,因为容器(如 Tomcat)自带 API 实现[^2]。 3. **常见问题与验证**: - **错误处理**:如果依赖缺失或版本冲突,可能出现 `java.lang.NoSuchMethodError`,需检查依赖树并排除冲突包[^5]。 - **实际使用**:在 Servlet 类中(如 `HelloServlet`),您可以直接导入这些类来处理请求,例如重写 `doGet` 方法[^1]。 - **版本选择**:对于新项目,建议使用 Servlet 4.0+(Artifact ID 仍为 `javax.servlet-api`),但需确保容器兼容。 4. **注意事项**: - 在 Spring Boot 项目中,通常无需手动添加此依赖,因为 `spring-boot-starter-web` 已自动管理它(内部使用 Tomcat 嵌入)。 - 如果迁移到 Jakarta EE(Java EE 的继任者),包名可能变为 `jakarta.servlet.*`,但 Maven Artifact ID 类似(如 `jakarta.servlet-api`)。 ### 引用说明 - 引用[2]解释了为什么使用 `provided` scope:Servlet API 在运行时由应用服务器提供,避免重复打包[^2]。 - 引用[4]强调了依赖缺失时的典型错误:`package javax.servlet does not exist`,需通过 Maven 解决[^4]。 - 引用[5]提醒了版本冲突的排查方法:使用 `<exclusions>` 排除冲突依赖[^5]。 如果您在添加依赖后仍遇到问题,请提供更多上下文(如错误日志),我可以进步协助。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PM之友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值