精华内容
下载资源
问答
  • 主要介绍了C#控制台程序中使用官方依赖注入的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了python的依赖管理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要为大家详细介绍了angularjs依赖注入的自己成果,如何实现angularjs依赖注入,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要给大家介绍了关于ASP.NET MVC实现依赖注入的完整过程,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET MVC具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 主要介绍了Springboot的maven间接依赖实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 今天小编就为大家分享一篇python离线安装外部依赖包的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 今天小编就为大家分享一篇python通过txt文件批量安装依赖包的实现步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了vue实践---vue不依赖外部资源实现简单多语操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 第一 ~ 五章 ...第六章 目前,对水利工程进行可行性论证时,包含如下哪些评价内容: 技术 经济 环境 ...在进行区域水资源配置时,为贯彻公平正义的原则,应该... 区域对水资源的依赖程度 区域的整体经济社会水平...

    第一 ~ 五章

    工程职业伦理(2018年秋)学堂在线习题

    第六章

    1. 目前,对水利工程进行可行性论证时,包含如下哪些评价内容:
    • 技术
    • 经济
    • 环境
    • 伦理
    1. 在进行区域水资源配置时,为贯彻公平正义的原则,应该考虑哪些因素?
    • 区域对水资源总量的贡献
    • 区域对水资源的依赖程度
    • 区域的整体经济社会水平
    • 区域的生态环境用水额度
    1. 关于水利工程移民,下面的判断不正确的是:
    • 移民的权利应该得到充分尊重,但应该以法律为界。
    • 国家应该无条件承担移民补偿安置的主体义务。
    • 对移民的损失进行合理的计算和补偿是落实公正原则的核心。
    • 大型水利工程移民,补偿由中央政府承担,具有一定合理性。

    第七章

    1. 如果科研人员招募受试者时确立了公开、透明和科学的准入和排除标准,就体现了下列哪种公正类型?
    • 程序公正
    • 回报公正
    • 分配公正
    1. 如果科研人员篡改科研论文图像和数据,这就违反了下列哪条伦理准则?
    • 知情选择
    • 风险最低化
    • 受益最大化
    • 诚实守信
    • 协同互助
    1. 你是否赞同下列说法,当前科学家发现的“疾病相关基因”都是坏基因
    • 赞同
    • 反对

    第八章

    1. 与其他工程相比,核工程具有一系列特点,主要包括( )
    • 规模大
    • 投资高
    • 系统简单
    • 技术成熟度要求高
    1. 影响核事故信息公开的主要因素包括( )
    • 政治因素
    • 经济因素
    • 社会因素
    • 技术因素
    1. 就温室气体排放而言,产生单位电量的核电所排放的CO2量比煤电( )
    • 相当
    • 不确定

    第九章

    1. 与机械技术、电气技术相比,信息技术具有连接能力、( ) 能力、( )能力和融合能力。随着物联网、云计算、大数据应用风起云涌,信息化正在飞速改变人们生产、生活和思维方式,被认为具有强烈的跨界“颠覆性”。
    • 异构,交互
    • 异构,渗透
    • 交互,渗透
    • 重构,交互
    1. 以下哪些方面,是大数据创新科技人员应当具备的伦理责任。请选择五项内容( )。
    • 尊重他人
    • 以企业利益为先
    • 公平待人
    • 为增进社会福祉尽力
    • 秉持技术中立、无害信条
    • 避免伤害他人利益
    • 遵守法律和行业规范
    1. 由于大数据创新往往离不开“人”的特性或其社会属性,因而带来了很多新颖的伦理困境。以下哪些是信息和网络技术已经带来的伦理风险? 请选择四项内容( )。
    • 人际关系虚拟化
    • 数字身份困境
    • 个人隐私边界
    • 虚拟行为的正当性
    • 知识产权争议
    • 数据资产与权利之困
    • 全球化网络空间治理困境
    • 大数据治理与公权力边界

    第十章

    1. 以下哪项是环境工程师首要遵守的准则( )。
    • 将公众的安全、健康和福祉置于首位
    • 仅在他们有能力胜任的领域内从事工作
    • 仅以客观的和诚实的方式发表公开声明
    • 作为忠诚的代理人和受托人为雇主和客户从事职业工作
    1. 刘明是负责再生水厂建设项目的设计工程师,他很喜欢这个工作,他的设计方案并未得到业内经验丰富的工程师审核,而是经过领导相熟的几位专业人员进行简单评审之后就开始了工程建设,刘明很担心由于自己经验不足导致出现严重问题,对刘明后续行动建议中相对最好的第一选择是( )。
    • 告诉上司,说自己不能继续从事超出自己能力经验的设计工作,并且可能不得不考虑换一份工作,通知相关工程安全管理机构或其他能够制止这种行为的机构。
    • 再次找到主管,并以最合适的方式说明他对自己的设计没有得到恰当的审核而感到不安,并指出生产可能有缺陷的设计不符合公司的利益。
    • 直接另谋一份工作,而对过去的事保持沉默,让其他年轻的工程师继续做这份工作。
    • 继续目前的工作而不做任何的举动。
    1. 非人类中心主义主张( )。
    • 人类以外的某些存在物拥有道德
    • 人类是自然界的主人和统治者
    • 并非人类才有价值,尊重大自然
    • 人类是自然界中的一环,不是统治者

    期末考试

    多选

    1. 工程的社会成本主要表现在
    • 对环境、资源影响所形成的社会成本
    • 对社会影响所形成的社会成本
    • 对经济影响所形成的社会成本
    • 对企业影响所形成的社会成本
    1. 当人类的利益与自然的利益发生冲突时,评价何种原则具有优先性的基本原则有
    • 补偿原则
    • 整体利益高于局部利益原则
    • 需要性原则
    • 不损害原则
    1. 疫苗临床试验的伦理要求包括
    • 试验设计要求科学合理
    • 知情同意
    • 公平地选择受试者
    • 安全有效性
    • 疫苗的公正分配
    1. 在具体的工程实践中,相互冲突的责任主要表现在
    • 企业利益的正当性
    • 个人利益的正当性
    • 群体利益的正当性
    • 原则的正当性
    1. 在培养核工程师的过程中,应该
    • 培养他们的工程思维能力
    • 培养他们对长远结果的负责能力
    • 树立和培养伦理责任意识
    • 培养核安全法律意识
    1. 职业伦理章程的含义包括
    • 工程师的责任就是他(她)在工程生活中必须履行的角色责任
    • 工程师不仅“具有作为道德代理人的一般能力,包括理解倒的理由和按照道德理由行动的能力”
    • 工程师接受自己的工作职责和社会责任,并且自觉地为实现这些义务努力
    • 在具体的工程活动中,工程师能明确区分何为正当的行为、何为错误的行为
    1. 由于工程类型的不同,引发工程风险的因素是多样的。总体而言,这些
    • 系统因素
    • 技术因素
    • 环境因素
    • 人为因素
    1. 为了更好地在工程实践中履行伦理责任,工程师需要处理的伦理关系包括
    • 自主与责任的关系
    • 效率和公正的关系
    • 个人与集体的关系
    • 环境与社会的关系
    1. 核安全基本原则包括
    • 管理责任
    • 纵深防御
    • 基本技术原则
    • 伦理原则
    1. 加强核工程宣传教育,提高核电信息公开,需要做到
    • 充分进行科普宣传教育
    • 正确进行舆论引导
    • 为避免不必要的恐慌,适度缩小公众对核事故的知情权
    • 民众更多的知情权和参与权
    1. 在工程实践中,工程师除了面临伦理准则的问题外,还面临这下列哪些伦理冲突?
    • 角色冲突
    • 利益冲突
    • 社会冲突
    • 责任冲突
    1. 药物临床试验中的伦理问题包括
    • 研究方案缺乏科学性
    • 侵犯了知情同意权
    • 风险和受益的不公正分担
    • 临床试验数据造假
    • 监管和审查不到位
    1. 环境工程的社会责任包括
    • 经济责任
    • 持续发展责任
    • 法律责任
    • 道德责任
    1. 制定事故应急预案应遵循的原则有
    • 预防为主,防治结合
    • 快速反应,积极面对
    • 以人为本,生命第一
    • 统一指挥,协同联动
    1. 我国自来水价格在构成上包括
    • 水源涵养费
    • 水费
    • 水资源费
    • 污水处理费
    1. 根据伦理规范得到社会认可和被制度化的程度,伦理规范包括
    • 制度性的伦理规范
    • 描述性的伦理规范
    • 主体性的伦理规范
    • 社会性的伦理规范
    1. 为了在工程实践中实现基本公正,在工程项目过程中需要建立和完善哪些机制?
    • 进行项目社会评价
    • 鼓励公众参与
    • 针对无法预测和未进行前期考量的公正问题,引入后评估机制
    • 扩大关注视域,开展利益相关者分析
    1. 核工程应遵循的伦理原则包括
    • 以人为本原则
    • 可持续发展原则
    • 生态原则
    • 公正原则
    1. 自然界的价值包括
    • 工具价值
    • 主观价值
    • 内在价值
    • 生命价值
    1. 影响水利工程风险客观公正评估的因素包括
    • 行政因素
    • 水文及地质条件的不确定性
    • 公众参与程度
    • 具体工程实践中对风险问题的不同解读

    单选

    1. 下列哪项不属于世界工程组织联盟提出的“工程师的环境伦理规范”?
    • 努力使用尽可能少的原材料与能源,并只产生最少的废物和其他污染来达到你的工作目标
    • 增进对需要恢复环境的行动的透彻理解
    • 拒绝任何牵涉不公平地破坏居住环境和自然的委托
    • 工程师一旦通过职业判断发现情况危急公众安全、健康和福祉,应告知他们的客户或雇主可能出现的后果
    1. 工程活动的最高境界应该是实现并促进人与自然的协同发展。
    • 正确
    • 错误
    1. 当某项工程出现质量事故时,下列处理程序错误的是
    • 暂停该工程施工并采取有效安全措施
    • 要求监理工程师尽快提出质量事故报告并报告业主
    • 组织有关人员对事故现场进行审查
    • 对承包人提出的有争议的质量事故责任予以认定
    1. 下列关于职业的说法,错误的是
    • 职业自治需要同时建立职业的行为规范和技术规范
    • 职业自治是职业共同体的形成条件
    • 职业是社会组织的一种形式
    • 职业治理包括对职业规范和社会规范的治理
    1. 目前,工程安全等级划分的比较有效的方法是“模糊集理论”。
    • 正确
    • 错误
    1. 下列关于大数据的权属问题的说法,错误的是
    • 大数据在数据权属问题上有明确边界
    • 大数据的价值多体现在关联价值上
    • 数据的价值有非消耗性,不随使用次数增多而减少
    • 大数据的货币价值与数据质量密切相关
    1. 水利工程伦理问题的核心是发展与生态平衡。
    • 正确
    • 错误
    1. 几乎所有的工程社团都将“公众的安全、健康与福祉”放在职业伦理章程第一条款的位置,以确保工程师个人遵守职业标准并尽职尽责。
    • 正确
    • 错误
    1. 当前世界普遍承认的生物医药工程伦理准则不包括
    • 知情选择
    • 经济利益最大化
    • 受益最大化
    • 协同互助
    1. 从全燃料链角度看,煤电燃料链对环境的影响和健康风险比核电燃料链
    • 二者相似
    • 不确定
    1. 下列哪项不属于罗斯提出的直觉主义义务论的道德原则
    • 责任
    • 遵守诺言
    • 仁慈
    • 正义
    1. 设计和建造是工程实践的两个孤立的环节。
    • 正确
    • 错误
    1. 产品价格是企业出于经济效益的考虑做出的决策,与工程伦理问题无关。
    • 正确
    • 错误
    1. 在药品研发过程中,有些药厂倾向于隐瞒负面的结果。这一行为违背了制药企业的社会责任。
    • 正确
    • 错误
    1. 环境工程中的社会公正涉及的问题不包括
    • 资源和利益的分配问题
    • 强势群体与弱势群体的问题
    • 主流文化与边缘文化的问题
    • 工程生产安全的问题
    1. 环境工程伦理问题中最核心的问题是资源利用问题
    • 正确
    • 错误
    1. 环境工程的基本内容不包括
    • 大气污染防治工程
    • 水污染防治工程
    • 环境污染综合防治
    • 环境生态意识的宣传和推广
    1. 核安全文化的主旨是强调人的因素在保证和安全上的主导和核心作用。
    • 正确
    • 错误
    1. 保护数据隐私面临的挑战不包括
    • 信息基础设施的可信性与可靠性
    • 快速扩散性与放大器效应
    • 身份盗窃与冒用
    • 个人对公开信息的认可
    1. 下列关于(利益)攸关方的说法,错误的是
    • 关注对象是自身权益
    • 具有同质性
    • 相对低位比较弱势
    • 被动承受工程的影响
    展开全文
  • 1.1什么是瀑布模型 1.2特点 1.3优缺点 1.4客户需求 二、快速原型模型 2.1什么是快速原型模型 2.2优缺点 2.3快速原型模型的思想产生、原理及运用方式 2.4类型 2.5开发步骤 三、增量模型 3.1什么是增量模型...

    目录

    一、瀑布模型

    1.1什么是瀑布模型

    1.2特点

    1.3优缺点

    1.4客户需求

    二、快速原型模型

    2.1什么是快速原型模型

    2.2优缺点

    2.3快速原型模型的思想产生、原理及运用方式

    2.4类型

    2.5开发步骤

    三、增量模型

    3.1什么是增量模型

    3.2特点

    3.3优缺点

    3.4作用

    四、螺旋模型

    4.1什么是螺旋模型

    4.2特点

    4.3优缺点

    4.4限制条件


    一、瀑布模型

    1.1什么是瀑布模型

    1970年温斯顿.罗伊斯提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型

    瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落

    瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位,它提供了软件开发的基本框架。其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容给出该项活动的工作成果,并作为输出传给下一项活动

    从本质来讲,它是一个软件开发架构,开发过程是通过一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,开发进程从一个阶段“流动”到下一个阶段,这也是瀑布开发名称的由来

    对于经常变化的项目而言,瀑布模型毫无价值

    1.2特点

    1、阶段间具有顺序性和依赖性

    该阶段具有两重含义

    1. 必须等前一阶段的工作完成后,才能开始后一阶段的工作
    2. 前一阶段的输出文档就是后一阶段的输入文档,因此只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果

    2、推迟实现的观点

    对于规模较大的软件项目来说,往往编码开始的越早,最终完成开发所需时间越长。因为前面阶段的工作没做或做的不扎实,过早地考虑进行程序实现,往往导致大量返工,有时甚至发生无法弥补的问题

    瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现

    清楚的区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想

    3、质量保证的观点

    为了保证所开发的软件的质量,在瀑布模型的每一个阶段都应坚持两个重要做法

    1. 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务
    2. 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误

    传统的瀑布模型过于理想化,实际的瀑布模型是带"反馈环"的。如图所示(图中实线箭头表示开发过程,虚线箭头表示维护过程),当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品后再回来继续完成后面阶段的任务

    瀑布模型是文档驱动的模型,遵守这个约束可使软件维护变得比较容易一些,从而显著降低软件预算

    1.3优缺点

    优点:

    • 项目提供了按阶段划分的检查点
    • 当前一阶段完成后,您只需要去关注后续阶段
    • 可在迭代模型中应用瀑布模型

    缺点:

    • 不适合需求模糊或需求经常变动的系统
    • 由于开销的逐步升级问题,它不希望存在早期阶段的反馈
    • 在一个系统完成以前,它无法预测一个新系统引入一个机构的影响
    • 用户可能需要较长等待时间来获得一个可供使用的系统,也许会给用户的信任程度带来影响和打击
    • 最终产品往往反映用户的初始需求而不是最终需求

    1.4客户需求

    对项目而言,是否使用这一模型主要取决于是否能理解客户的需求以及在项目的进程中这些需求的变化程度;对于经常变化的项目而言,瀑布模型毫无价值,可以考虑其他的架构来进行项目管理,比如螺旋模型

    瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:

    1. 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量
    2. 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险
    3. 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果

    按照瀑布模型的阶段划分,软件测试可以分为单元测试集成测试系统测试

     

    二、快速原型模型

    2.1什么是快速原型模型

    快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集

    快速原型模型是增量模型的另一种形式,在开发真实系统之前,迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,在该原型的基础上,逐渐完成整个系统的开发工作

    它允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护

    2.2优缺点

    优点

    • 克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险
    • 适合预先不能确切定义需求的软件系统的开发

    缺点

    • 所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下
    • 使用前提是要有一个展示性的产品原型,一定程度上可能会限制开发人员的创新

    2.3快速原型模型的思想产生、原理及运用方式

    1、思想产生

    在需求分析阶段得到完全、一致、准确、合理的需求说明十分困难

    获得一组基本需求说明后,就快速地使其“实现”,通过原型反馈,加深对系统的理解满足用户基本要求,使用户在试用后对需求说明进行补充和精确化,从而获得合理完整、现实可行的需求说明

    再把快速原型思想用到软件开发的其他阶段,向软件开发的全过程扩展

    先用相对少的成本,较短的周期开发一个简单的、但可以运行的系统原型向用户演示或让用户试用,以便及早澄清并检验一些主要设计策略,在此基础上再开发实际的软件系统

    2、原理

    利用原型辅助软件开发

    经过简单快速分析快速实现一个原型,用户与开发者在试用原型过程中加强通信与反馈,通过反复评价和改进原型,减少误解,弥补漏洞,最终提高软件质量

    3、运用方式

    由于运用原型的目的和方式不同,在使用原型时也采取不同的策略

    • 抛弃策略:将原型用于开发过程的某个阶段,促使该阶段的开发结果更加完整、准确、一致、可靠,该阶段结束后,原型随之作废。探索型和实验型就是采用此策略的
    • 附加策略:将原型用于开发的全过程,原型由最基本的核心开始,逐步增加新的功能和新的需求,反复修改反复扩充,最后发展为用户满意的最终系统,演化型快速原型就是采用此策略

    采用何种形式、何种策略运用快速原型主要取决于软件项目的特点、可供支持的原型开发工具和技术等,根据实际情况的特点决定

    2.4类型

    在软件开发中,原型是软件的一个早期可运行的版本,它反映最终系统的部分重要特性

    探索型

    这种原型目的是要弄清对目标系统的要求,确定所希望的特性,并探讨多种方案的可行性

    实验型

    这种原型用于大规模开发和实现之前,考核方案是否合适,规格说明是否可靠

    进化型

    这种原型的目的不在于改进规格说明,而是将系统建造得易于变化,在改进原型的过程中,逐步将原型进化成最终系统

    2.5开发步骤

    1、快速分析

    在分析人员与用户密切配合下,迅速确定系统的基本需求,根据原型需要体现的特征描述基本需求以满足开发原型的需要

    2、构造原型

    在快速分析的基础上,根据基本需求说明尽快实现一个可行的系统

    要求具有强有力的软件工具的支持,并忽略最终系统在某些细节上的要求,主要考虑原型系统能够充分反映所要评价的特性

    3、运行原型

    发现问题,消除误解,开发者与用户充分协调

    4、评价原型

    在运行的基础上,考核评价原型的特性,分析运行效果是否满足用户的愿望,纠正过去交互中的误解与分析中的错误,增添新的要求,并满足因环境变化或用户的新想法引起的系统要求变动,提出全面的修改意见

    5、修改

    根据评价原型的活动结果进行修改

    若原型未满足需求说明的要求,说明对需求说明存在不一致的理解或实现方案不够合理,根据明确的要求迅速修改原型

    快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的

    快速原型的本质是"快速"。开发人员应尽可能地建造出原型系统,以加速软件开发过程,节约软件开发成本

    原型的用途是获知用户的真正需求,一旦需求确定了,原型将被抛弃

     

    三、增量模型

    3.1什么是增量模型

    增量模型也称渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能

    使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能

    把软件产品分解成增量构件时,唯一必须遵守的约束条件是,当把新构件集成到现有构件中时,所形成的产品必须是可测试的

    瀑布模型或快速原型模型目标是一次就把一个满足所有需求的产品提交给用户

    增量模型把整个软件产品分解成许多个增量构件,分批地逐步向用户提交产品

    3.2特点

    把瀑布模型的顺序特征与快速原型法的迭代特征相结合

    将软件看作一系列相互联系的增量,在开发过程的各次迭代中,每次完成其中的一个增量

    风险更大的增量模型

    确定用户需求后就着手拟定第一个构件的规格说明文档,完成后规格说明组转向第二个构件的规格说明文档,同时设计组开始涉及第一个构件

    使用该方法将不同的构件并行构建,可能加快工程进度,但将冒构建无法集成到一起的风险

    3.3优缺点

    优点

    1. 能在较短的时间内向用户提交可完成部分工作的产品
    2. 将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展
    3. 以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
    4. 开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整

    缺点

    1. 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构
    2. 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性
    3. 如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程

    3.4作用

    1、开发初期的需求定义只是用来确定软件的基本结构,使得开发初期用户只需要对软件需求进行大概的描述;而对于需求的细节性描述,则可以延迟到增量构件开发时进行,以增量构件为单位逐个地进行需求补充。这种方式能够有效适应用户需求的变更

    2、软件系统可以按照增量构件的功能安排开发的优先顺序,并逐个实现和交付使用。不仅有利于用户尽早用上系统,能够更好地适应新的软件环境,而且在以增量方式使用系统的过程中,还能获得对软件系统后续构件的需求经验

    3、软件系统是逐渐扩展的,因此开发者可以通过对诸多构件的开发,逐步积累开发经验。实际上,增量式开发还有利于技术复用,前面构件中设计的算法、采用的技术策略、编写的源码等,都可以应用到后面将要创建的增量构件中去

    4、增量式开发有利于从总体上降低软件项目的技术风险。个别的构件或许不能使用,但一般不会影响到整个系统的正常工作

    5、实际上,在采用增量模型时,具有最高优先权的核心增量构件将会被最先交付,而随着后续构件不断被集成进系统,这个核心构件将会受到最多次数的测试。这意味着软件系统最重要的心脏部分将具有最高的可靠性,这将使得整个软件系统更具健壮性

     

    四、螺旋模型

    4.1什么是螺旋模型

    螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径

    螺旋模型是快速原型模型以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。该模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。用螺旋模型的软件过程如下

    简化的螺旋模型

    完整的数据模型

     

    图中带箭头的点划线的长度代表当前累计的开发费用,螺旋线的角度值代表开发进度,螺旋线的每个周期对应于一个开发阶段

    图中的四个象限代表了以下活动

    1. 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件
    2. 风险分析:分析评估所选方案,考虑如何识别和消除风险
    3. 实施工程:实施软件开发和验证
    4. 客户评估:评价开发工作,提出修正建议,制定下一步计划

    4.2特点

    螺旋模型在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定

    螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应,因此特别适用于庞大、复杂并具有高风险的系统

    4.3优缺点

    优点

    1. 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
    2. 减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险
    3. 在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别

    缺点

    1. 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失
    2. 过多的迭代次数会增加开发成本,延迟提交时间

    4.4限制条件

    1. 螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发
    2. 如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目
    3. 软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险

    一个阶段首先是确定该阶段的目标,完成这些目标的选择方案及其约束条件,然后从风险角度分析方案的开发策略,努力排除各种潜在的风险,有时需要通过建造原型来完成。如果某些风险不能排除,该方案立即终止,否则启动下一个开发步骤。最后,评价该阶段的结果,并设计下一个阶段

    展开全文
  • maven

    千次阅读 多人点赞 2018-07-11 16:03:00
    Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包 什么是maven项目 包含pom.xml的项目就是maven项目。 maven项目...

    概览

    在这里插入图片描述

    产生原因

    • 标准化
      在maven中,约定优于配置。规定好的标准,可以促进项目团队的标准化,减少写作冲突,在项目切换时免去了学习成本。这些标准具体包括:

      • 对于项目目录结构、测试用例命名方式等内容都有既定规则
      • 引入了仓库的概念,规范了jar包的获取方式(maven方式),从而使得获取的jar包内容也更加规范。之前,jar包的获取方式五花八门,使得获取的jar包的内容也有差异。并且,统一集中式管理jar包的方式,使得jar包共享,实现了jar包和项目分离,减轻了项目体积。
      • 标准化工程构建过程。提供了一个可复用、易维护的工程模型,从而让项目中各个工程可以更加方便地整合和交互,让团队更加方便协作
    • 自动化、智能化

      • 最大化地消除构建的重复,抽象了构建生命周期。不需要在定义构建过程,且不需要手动实现这些步骤。其中就包括常见的,将java编译成bin,自动执行所有单元测试等功能,无需依赖IDE工具即可实现)
      • 传统web工程jar包直接放在项目中,Maven提供免费而非常丰富的中央仓库,帮助我们自动下载构建,解决依赖问题。我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。
      • 管理原本分散在项目中各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等,节省了寻找信息的时间
      • 自动生成站点,从而使得轻松地获得项目文档、测试报告、静态分析报告、原码版本日志报告等非常具有价值的项目信息。
      • 将父工程和各个子工程或者模块打包成pom或者jar包到仓库中,为其他子工程或者模块提供相关依赖,更方便地将一个臃肿的大工程拆分成多个子工程或者模块,以便于团队协作开发。

    定义

    maven本质上是一个项目管理工具,提供了模板工具来帮助开发人员快速了解项目并加速开发:

    • 使用maven项目开发模板(包括项目架构构建过程等),开发人员可以在了解一个项目的架构后,迅速了解和操作多个实际的项目。
    • 使用maven提供的项目管理工具,开发人员可以加速项目开发和管理。

    maven是Apache开发的一款开源的服务于Java平台的自动化构建工具,完成重复性工作。2004年就产生了。

    具体步骤包括(不限于):

    • 工程目录的创建:标准化工程目录
    • 包的导入:同一个项目所有工程使用同一个自动导入包和包的依赖(快照)
    • 工程构建:本项目以及相关项目的自动化构建(清理、编译、测试、生成报告、打包、部署)
    • 创建工程文档

    工作原理相关知识

    安装目录

    • maven安装目录

      假设Maven_HOME为Maven的安装目录,该安装目录的内部目录包含:

      bin boot conf lib LICENSE.txt NOTICE.txt README.txt

      • bin: maven的运行脚本。执行任何一条mvn命令,实际上都是在调用这些脚本。
      • boot: maven的类加载器
      • conf: maven的配置文件,其中 settrings.xml 用于配置maven的全局行为。
      • lib: maven本身对应的.class文件,即maven本身
    • maven本地仓库目录

      maven默认的本地仓库目录为C:\Users\用户名\.m2目录

    生命周期

    • 定义

      maven对项目构建过程的抽象和统一,从理论上定义了maven的工作内容和工作过程。通过插件实现。

    • 内容

      maven定义了三套生命周期cleandefaultsite,各生命周期相互独立

      每个生命周期都包含了一些阶段(phase)【3套生命周期中phase详解】,每个生命周期中各phase执行时,必须从该生命周期第一个phase开始,按照既定顺序执行到要执行的phase。

      • clean:清理项目

      • default:部署项目(即通过“原材料”得到一个可运行项目的过程)

        主要(不是全部)包括:

        • validate:验证项目是否正确,提供必要的信息
        • compile:编译项目源代码
        • test:测试
        • package:打包
        • verify:检查集成测试结果
        • install:安装打包的项目到本地仓库,异构其他项目使用
        • deploy:部署,拷贝最终的工程包到远程仓库
      • site:生成项目站点(为工程相关信息生成一个HTML)

    插件

    • 定义

      java程序(jar包),通过maven命令调用运行。

    • 作用

      为实现maven定义的抽象的声明周期而生。每个插件包含多个插件目标(goal),goal和phase绑定,在使用maven命令实现某个phase时,实际上调用的是插件的goal。

    • 执行语法

      mvn [plugin-name]:[goal-name]
      

      例子:

      mvn compiler:comile //编译
      
    • 实现方法

      maven中每个插件可以实现多个功能(goal),通过将插件中的goalphase进行绑定,来实现maven的生命周期。maven对一些生命周期的phase绑定了默认插件目标,用户也可以在pom.xml中自定义绑定,实现自己定制的声明周期的实现。

    • 位置

      在maven仓库中

    • 补充说明

      用户可以根据需求,创建自己的maven插件。

    依赖

    依赖的释义

    依赖,作为名词,指的是工程代码中直接用到的别人已经写好的工程代码(.class文件)。作为动词,指一个工程代码对另外一个工程的代码的引用。

    依赖的配置

    <!-- 依赖的坐标(必选,其他可根据需要配置 -->
    <groupId>com.didispace</groupId>
    <artifactId>chapter1-1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- 依赖的类型(默认为jar) -->
    <type>jar</type>
    <!-- 依赖的范围(默认为compile) -->
    <scope>compile</scope>
    <!-- 标记依赖是否可选 -->
    <optional></optional>
    <!-- 排除传递性依赖 -->
    <exclusions></exclusions>
    
    <!-- 依赖的统一配置 -->
    <!-- 引用依赖属性值时,使用${属性名} -->
    <properties>
        <属性名>属性值</属性名>
    </properties>
    
    

    依赖范围

    依赖范围即依赖产生作用的时期,maven有三个classpath文件,分别在编译测试运行时用到。各依赖对应的.class文件,通过依赖被引入到对应classpath中,依赖范围对应依赖被引入到哪个classpath。除了表中的依赖范围之外,还有一个import依赖范围,其只在dependencyManagement元素中使用,用于导入其他dependencyManagement的配置。

    依赖范围含义编译测试运行例子
    compile编译时用到的依赖,依赖的默认值YYYspring-core
    test仅测试时用到的依赖YJUnit
    provided容器已提供的依赖YYservlet-api
    runtime运行时用到了依赖YYJDBC驱动实现
    system操作系统提供的依赖YY本地的,maven仓库外的类库文件

    依赖的传递性

    maven通过pom文件中,在标签工程的直接依赖,如果也使用pom文件来声明自己的直接依赖,直接依赖的直接依赖也是同样,那么如此循环下去,工程的直接依赖以及所有间接依赖就都可以通过传递性获知。因此,每个工程只需要在自己的pom文件中声明好自己直接依赖即可

    依赖的传递性和依赖的作用范围有关。下表中,最左边一列表示工程的第一直接依赖范围,第一行表示工程的第二直接依赖范围(即工程直接依赖的直接依赖),中间的交叉单元格表示传递性依赖范围(为空表示依赖不会传递,即不存在依赖关系)。

    1 2compiletestprovidedruntime
    compilecompileruntime
    testtesttest
    providedprovidedprovidedprovided
    runtimeruntimeruntime

    父子继承关系的项目的依赖,不论什么范围(compile、test、provided、runtime)可以由父项目传递(继承)下给子项目。因此可以利用父工程pom文件,实现所有子工程依赖“一改全改”。

    依赖冲突的解决原则

    • 路径近者优先

      A–>B–>C–>D–>X(1.6)
      A–>E–>D–>X(2.0)
      

      X(2.0)距离项目A更近,项目A使用X(2.0)

    • 先声明者优先

      A–>B–> X(1.6)
      A–>C–> X(2.0)
      

      路径相同时,B先于C声明,则项目A使用X(1.6)

    可选依赖&排除依赖

    可选依赖和排除依赖都是阻断依赖传递的方法。可选依赖阻断的是依赖本项目的项目对本项目的依赖之间的依赖关系,排除依赖阻断的是本项目和间接依赖之间的依赖关系。

    • 可选依赖

    在这里插入图片描述

    项目B的某些依赖不推荐被依赖B的项目所使用时,需要将这些依赖声明成可选依赖。可选依赖不会被传递,即X和Y不会被A依赖。如果项目A想使用X作为依赖,则需要在自己的pom文件中重新声明。

    • 排除依赖

      项目A不想使用他的某些间接依赖时使用。如项目A所的依赖没有正确的设置它们的依赖集。被排除的依赖不会被传递,即依赖项目A的项目,不会依赖被A排除的依赖。

    依赖的统一配置

    pom文件中,某些重复出现的常量值可能需要同步变动,如需要统一的版本号。此时,为实现pom文件一改全改的需求,就需要使用\ </properties>标签,声明常量名和常量值,并在常量出现的地方,使用${常量名}的方式引用常量。如:

    <properties>
        <springframework.version>属性值</springframework.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springframework,version}</version>
        </dependency>
    </dependencies>
    

    POM

    • 定义

      Project Object Model:项目对象模型。是 Maven 项目核心基本工作单元

      放在工程目录下,文件命名为 pom.xml,包含了关于maven项目的项目构建配置信息,主要包括项目自身的信息,项目的依赖,项目运行所需环境信息(如:jdk,tomcat)。

      maven是根据 pom.xml 来识别maven工程的

      pom.xml在打包以后就会变成.pom文件

      在maven中执行maven命令:在 pom.xml 上右键

    Super POM

    所有的 POM 都继承自一个父 POM,用于继承默认设置,帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被重写。

    pom文件没有显示声明继承关系时,Maven有一个默认POM作为 Super POM

    Maven 使用 effective pom(Super pom + 工程自己的 pom)来执行相关的目标。

    父 POM 通过<parent></parent>标签指定

     <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>my-app</artifactId>
        <version>1</version>
      </parent>
    

    使用时需知知识

    标准目录结构

    maven的标准项目结构如下,当然也可以通过更改pom.xml来配置适合自己的项目结构。

    project (项目根目录)

    • src (源码)
      • main (主程序)
        • java (java源码)
        • resources (应用资源)
        • filters (资源过滤器文件)
        • webapp (web应用资源)
      • test (测试程序)
        • java
        • resources
        • filters
      • it (集成测试(主要针对插件))
      • assembly (装配描述符)
      • site (站点)
    • target (编译结果,存放java项目编译后生成的.class文件)
    • LICENSE.txt
    • NOTICE.txt (项目所依赖的库所需的通知和属性)
    • README.txt
    • pom.xml:maven的核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置

    坐标-完全限定名

    构件(项目的依赖插件,以及该项目的构建输出)的完全限定名,用于在maven的各种仓库中,唯一地定位一个构件。

    构件在maven仓库中对应的目录groupId/artifactId/version。如下面例子对应的构件的文件夹为:com/didispace/charpter1-1/0.0.1-SNAPSHOT。

    构件名字为artifactId-version[-classifier].packaging。如下面例子对应的文件的名字为 charpter1-1-0.0.1-SNAPSHOT.jar。

    <!-- Maven的坐标包含,但不仅限于以下子标签: -->
    <!-- 工程组名                 (必须) -->
    <groupId>com.didispace</groupId>
    <!-- 工程名(jar包名字前半部分)  (必须) -->
    <artifactId>chapter1-1</artifactId>
    <!-- 工程版本(jar包名字后半部分)(必须) -->
    <version>0.0.1-SNAPSHOT</version>
    <!-- 工程打包方式             (可选,默认为jar) -->
    <packaging>jar</packaging>
    

    除了groupId,artifactId,version,packaging外,还有一个元素classifier:

    该元素用来帮助定义项目构建输出的一些附属构件。附属构件和主构件对应,包括项目的Java文档和源代码等。附属构件不是项目直接默认生成的,需要单独用一些插件来生成,因此不能像 groupId等元素一样直接定义。

    仓库

    • 分类

      • 项目仓库:项目内文件夹中的依赖包
        需要在pom.xml中配置proper

        <--! 格式 -->
        <repositories>
           <repository>
             <id>仓库唯一标识符</id>
             <name>仓库的描述</name>
             <url>仓库的路径</url>
           </repository>
        </repositories>
        
        <--! 例子 -->
        <repositories>
           <repository>
             <id>in-project</id>
             <name>In Project Repo</name>
             <url>file:///${project.basedir}\libs</url>
           </repository>
        </repositories>
        

        其中,${project.basedir}是pom.xml在系统中的路径。file:/// 的含义

        当然,本地仓库和远程仓库也可以通过上述标签配置,只需将仓库的项目的URL改成项目地址。

      • 本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有maven工程服务。

        默认的仓库位置为:

         [系统当前用户home目录]/.m2/repository
        

        修改本地库位置:在MAVEN_HOME/conf/setting.xml文件中修改

      • 远程仓库

        • 私服:搭建在局域网环境中,为局域网范围内所有maven工程服务,主流使用Nexus。

          有本地主机需要的jar包时,为本地主机提供jar包;没有本地主机需要的jar包时,代替本地主机从中央仓库下载需要的jar包。

        • 中央仓库:Maven社区提供的,为全世界所有maven工程服务。maven的默认远程仓库,安装时自带配置,需要联网访问。

        • 其他公共库:需要在POM中手动配置。

      • 外部依赖

        由于一些原因,存在于某个不是本地仓库和远程仓库下的依赖。例子

        <dependencies>
            <!-- 在这里添加你的依赖 -->
            <dependency>
                <groupId>ldapjdk</groupId>  <!-- 库名称,也可以自定义 -->
                <artifactId>ldapjdk</artifactId>    <!--库名称,也可以自定义-->
                <version>1.0</version> <!--版本号-->
                <scope>system</scope> <!--作用域-->
                <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath> <!--项目根目录下的lib文件夹下-->
            </dependency> 
        </dependencies>
        
    • 内容

      maven仓库中所有内容都按照统一方式管理和查找。仓库中的内容(即构件)包括:

      • maven插件
      • 第三方的框架或工具的jar包等依赖
      • 我们自己开发的项目的模块:需要执行 mvn install 命令,才能将包打入到仓库
    • 使用顺序

      本地仓库–>私服–>中央仓库–>其他远程仓库

      上一个没有,去下一个查找,连接私服和中央仓库均需要联网

    快照

    需要依赖处于不断更新状态的的版本的依赖(快照)时,Maven 会在每次构建时检查快照最新版本。快照版本通过在版本号后面加SNAPSHOT或者日期和常规版本进行区分。

    <dependencies>
          <dependency>
          <groupId>data-service</groupId>
             <artifactId>data-service</artifactId>
             <version>1.0-SNAPSHOT</version>
             <!-- 或者 <version>1.0-20190212.221414-13</version> -->
             <!-- 上面的表示2019年2月12日,22点14分14秒,第13个版本 -->
             <scope>test</scope>
          </dependency>
    </dependencies>
    
    

    继承

    • 定义:

      多个模块的pom存在很多相同配置时,为减少重复代码,统一配置信息,maven通过将相同配置信息写到一个父pom文件中,这些模块的pom文件作为子pom文件,继承父POM文件中的配置(即,可以不用显示声明父pom中已经存在的相关配置信息)。

    • 使用:

      • 声明一个父模块,父模块的打包方式为pom(通过在父pom文件中,设置<packaging>pom</packaging>实现),父模块一般只需要定义好pom.xml中的依赖即可,无需编写其他代码。在父模块中的pom文件中,写入所有子模块的统一配置信息,在所有子模块的<parent>标签中配置父模块信息,包括<groupId>、<artifactId>、<version>以及<relativePath>。其中,<relativePath>的默认值为 …/pom.xml,即maven默认父POM在上一层目录。

      • 如果子模块中需要使用和父模块中不一样的配置,则子模块应该显式声明。子模块会继承所有父模块相关的依赖配置(包括compile、test、provided、runtime)。

      • 可继承的pom元素

        • groupId

        • version

        • description:项目的描述信息

        • organization:项目的组织信息

        • inceptionYear:项目的创始年份

        • url:项目的URL地址

        • developers:项目的开发者信息

        • contributions:项目的贡献者信息

        • distributionManagement:项目的部署配置

        • issueManagement:项目的缺陷跟踪系统信息

        • ciManagement:项目的持续集成系统信息

        • scm:项目的版本控制系统信息

        • mailingLists:项目的邮件列表信息

        • properties:自定义的Maven属性

        • dependencies:项目的依赖配置

        • dependencyManagement:项目的依赖管理配置

          <!--dependencyManagement标签下的依赖,不会在父项目中引入依赖,也不会给他的子模块引入依赖,只有子类显示声明(如只包含groupId和artifactId)该标签下的依赖时,才会继承依赖的配置-->
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework</groupId>
                      <artifactId>spring-core</artifactId>
                      <version>2.0</version>
                  </dependency>
                  <dependency>
                      <groupId>com.juvenxu.mvnbook.account</groupId>
                      <artifactId>account-parent</artifactId>
                      <version>1.0-SHAPSHOP</version>
                      <type>pom</type>
                      <!--将依赖范围设为import,导入其他dependencyManagement的配置-->
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>
          
        • repositories:项目的仓库配置

        • build:项目的源码目录配置、输出目录配置、插件配置、插件管理配置等

        • reporting:项目的报告输出目录配置、报告插件配置等

    聚合

    • 定义:

      通过一个打包方式为pom的maven项目中,声明任意数量的module元素来实现一次性构建多个模块。当被构建的各个模块存在依赖关系时,maven会自动识别各个模块间的依赖关系,先构建被依赖的模块。

    • 使用:

      • 为了方便用户构建项目,通常将聚合模块放在项目目录最顶层,其他模块最为聚合模块的子模块。

      • module元素的值对应被构建模块和当前POM的相对目录。

    项目模板 Archetype

    为了帮助程序员快速创建一个项目结构,maven提供了archetype(原型/项目模板)插件。

    命令

    执行mvn命令时,需要调用bin目录下的脚本,大多数maven命令都需要依赖插件才能执行。

    maven的命令跨平台(因为是java脚本),在Windows、Linux、Mac都是一样的命令。

    执行和声明周期过程有关的maven命令,必须在pom.xml所在目录

    • [1] 清理:mvn clean
    • [2] 编译:mvn compile
    • [3] 编译测试:mvn test-compile
    • [4] 执行测试:mvn test
    • [5] 打包:mvn package
    • [6] 安装:mvn install
    • [7] 部署:mvn site

    常见问题

    生命周期和插件的关系?

    每套生命周期对应一个接口/抽象类,生命周期中的每个阶段(phase)对应一个方法声明。生命周期定义了phase的顺序,但是没有实现方法。插件目标goal可以看做是生命周期各个phase对应方法的实现,为复用代码,多个相似功能的goal组合成一个插件。使用maven命令执行到生命周期某个phase时,是通过将该phase和对应插件goal绑定实现的。maven的插件高度易扩展,可以自定义配置,插件和phase间的绑定关系也可以自定义。

    不推荐使用IDE内嵌的Maven的原因

    • IDE内嵌的maven通常比较新,不一定稳定
    • IDE内嵌的maven和系统安装的maven的命令如果是不同版本,会造成构建行为不一致

    什么是构建?

    构建(build)对应的就是maven的三个生命周期,其中核心是default

    什么是构件?

    构件包括构建项目时使用的依赖、插件,以及该项目的构建完成后的输出。

    构件通过坐标定位,根据坐标在仓库中取得。

    命令和插件的关系

    maven命令的执行,使用的是maven安装目录下的bin目录中的脚本。

    大部分maven命令的执行,需要依赖插件,即bin目录中的脚本会调用相关插件实现特定功能。

    maven的配置文件有哪些?

    maven的配置文件包括:

    • pom.xml

      某个项目范围内有效

    • %USER_HOME%/.m2/settings.xml

      某个用户范围内有效

    • ${maven.home}/conf/settings.xml

      全局范围有效

    其他:

    • maven可以通过settings.xml文件设置默认jdk,且不同maven可以识别的jdk版本会不同

    artifact是什么?

    artifact是maven中的一个概念,对应的是被打包文件的名字,也就对应一个被打包的文件。在IntelliJ IDEA中,module是编译、运行、测试和调试的单位,也是打包的单位。因此IDEA中使用maven时,一个module对应一个artifact包。

    参考文献

    https://blog.csdn.net/wangdong5678999/article/details/72848044 maven生命周期
    https://www.cnblogs.com/luotaoyeah/p/3819001.html maven的生命周期和插件
    https://www.runoob.com/maven/maven-tutorial.html maven 菜鸟教程
    https://www.cnblogs.com/tooy/p/7364303.html 可选依赖和排除依赖
    https://blog.csdn.net/weixin_42112635/article/details/87465997 外部依赖
    https://www.runoob.com/maven/maven-snapshots.html 快照
    https://blog.csdn.net/xiaoniaox/article/details/79029130 artifact 《Maven实战》
    https://blog.csdn.net/zlgydx/article/details/51130627 maven 仓库配置 pom中repositories属性 - CSDN
    https://blog.csdn.net/zhangbeizhen18/article/details/91353832 使用IntelliJ IDEA创建基于maven的父工程与子工程

    展开全文
  • SpringCloud面试题(二)

    万次阅读 2020-03-01 20:37:42
    SpringCloud面试题(二) 大家好,我是酷酷的韩金群~下面提供一些整理的springcloud面试题(二) ...为什么要使用微服务? 1.随着互联网的快速发展,各行各业都在用互联网。互联网已经离不开人们的形...

    SpringCloud面试题(二)

    大家好,我是酷酷的韩金群~下面提供一些整理的springcloud面试题(二)

    前面已经详细的整理了一版springcloud面试题(一) 地址如下:

    https://blog.csdn.net/hjq_ku/article/details/89504229

    酷酷的韩金群
    一.为什么要使用微服务?
    1.随着互联网的快速发展,各行各业都在用互联网。互联网已经离不开人们的形形色色。随着越来越多的用户,业务场景也愈来愈复杂。
    2.传统的单体架构已经很难满足互联网技术发展的要求,代码可维护性扩展性和可读性降低,维护成本的提高都是驱动微服务的发展趋势。

    二.作为服务注册中心,Eureka比Zookeeper好在哪里?

    1.Eureka保证的是可用性和分区容错性,Zookeeper 保证的是一致性和分区容错性 。
    2.Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障。而不会像zookeeper那样使整个注册服务瘫痪。

    展开全文
  • 这篇文章主要介绍了Spring当中的依赖注入(DI),以及他能注入的数据类型,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 什么依赖注入? Dependency Injection。它是 ...
  • 研究生工程伦理课程答案整理

    万次阅读 2019-12-17 09:55:12
    1.多选(1/1分) 对“什么是好的、正当的行为方式?”这一问题的思考和争议由来已久,从而形成了不同的伦理学思想和伦理立场。大体上,可以把这些伦理立场概括为() 口功利论 口契约论 口义务论 口德性论 正确答案:功利...
  • 多线程面试题(值得收藏)

    万次阅读 多人点赞 2019-08-16 09:41:18
    主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。 简单说ThreadLocal就是一种以...
  • 本篇文章主要介绍了详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...
  • 史上最全面Java面试汇总(面试题+答案)

    万次阅读 多人点赞 2018-07-06 14:09:25
    什么叫守护线程,用什么方法实现守护线程 守护线程是为其他线程的运行提供服务的线程。 setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为守护模式,false为用户模式。 36.Java线程池技术及原理 ...
  • WPF开发教程

    万次阅读 多人点赞 2019-07-02 23:13:20
    该属性系统实际是一个“依赖”属性系统,因为它会跟踪属性表达式之间的依赖关系,并在依赖关系更改时自动重新验证属性值。例如,如果您具有一个会继承的属性(如 FontSize),当继承该值的元素的父级发生属性更改时...
  • 主要介绍了Spring依赖注入的两种方式(根据实例详解),非常具有实用价值,需要的朋友可以参考下
  • 基于python opencv人脸识别的员工考勤系统

    万次阅读 多人点赞 2018-09-22 17:16:10
    face_feature_storage.py属于鸡肋文件,没什么用,舍不得删,毕竟有点参考价值。 face_recognize_punchcard_lib.py和face_recognize_punchcard.py本质上差不多, 但是前者是给face_img_register.py专有的依赖。防止...
  • Atitit 价值观与理念总结 Diy自力更生尽可能 提高独立性 减少依赖 大而全优先于小而美 适度分权防止集权导致大决策失误 方式多种多样 综合是王道 简单快速优先 努力实现人们喜闻乐见的服务 信.pdf
  • 本文主要介绍了ASP.NET下使用xml反序列化、缓存依赖实现个性化配置文件的实时生效的方法。具有一定的参考价值,下面跟着小编一起来看下吧
  • 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring...
  • 数据集成

    万次阅读 2018-05-13 21:16:32
    透明的方式是指用户无需关心如何实现对异构数据源数据的访问,只关心以何种方式访问何种数据。数据集成难点: ( 1 ) 异构性: 被集成的数据源通常是独立开发的, 数据模型异构, 给集成带来很大困难。这些异构性主要...
  • 大数据的核心价值的体现,主要体现在哪几方面,具体如下: 针对企业数据市场 商业的发展天生就依赖于大量的数据分析来做决策,对于企业用户,更关系的还是决策需求,还有企业营销需求。 针对终端消费者 对大数据...
  • Spring IOC原原理理补补充充说说明明(循循环环依依赖赖Bean作作用用域域等等) 这篇文章主要介绍了Spring IOC原理补充说明(循环依赖Bean作用域等)具有很好的参考价值希望对大家有 帮助一起跟随小编过来看看吧 前前言...
  • SpringCloud面试题目

    万次阅读 2018-09-16 13:20:20
    什么是微服务? 微服务之间是如何独立通讯的? SpringCloud和Dubbo有哪些区别? SpringBoot和SpirngCloud,请你谈谈对他们的理解 什么是服务熔断?什么是服务降级? 微服务的优缺点分别是什么?说下你在...
  • 数据的价值,是什么

    千次阅读 2018-08-31 09:49:07
    上篇我们说了,数据可确权,就可以把价值映射到数据上,不依赖特定中心的可确权数据,就可实现依赖特定中心的价值映射。很不幸地,我们要开始牵扯进一个很难说清楚的词:价值。 即使除去马克思经济学里那种“价值...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,268
精华内容 68,107
关键字:

价值实现依赖什么