作者:金针菇滚滚夹着五根水葱 | 来源:互联网 | 2023-10-12 09:46
Maven这个系列,是我读Maven in Action(Maven实践)的读书笔记,在后面的时间,我会慢慢的更新上来。如果有什么错误,望大家指正。
Maven学习总结系列一:Maven的简介
Maven主要服务于基于JAVA平台的项目构建,依赖管理和项目信息管理。
开发中的问题1:在开发过程中,我们出经常出现一些重复的工作,如设计的重复,编码的重复,文档的重复和构建的重建。清理,编译,测试到生成报告,项目打包和部署。
每个项目的构建方式可能都不一样,维护成本,沟通成本上升。
方案设想:是否可以将收集项目上重复的事项,抽象提炼共同的特性,形成一个标准化的流程与构建方式,做一个工具让他可以自动帮我们处理。
Maven是一个构建工具
它实现“构建”标准化,简单化,自动化。
Maven抽象了一个完整的构建生命周期模型,吸取了大量其它构建脚本和构建工具的优点,总结了大量项目的实际需求。形成一个约定,标准,模型。
让构建命令简单一致化,统一规则,避免不必要的学习成本,有利于促进项目团队的标准化。
开发中的问题2:几乎任何Java应用都会借用一些第三方的开源类库,这些类库都可以通过依赖的方式引入到项目中来。但随着依赖的增多,版本的不一致,版本冲突,依赖臃肿等问题都会接踵而来。
方案思考:
造成依赖包混乱,难于管理,主要体现是随着项目的变大,引用的包越来越多,包与包之间可能会存在版本上的冲突。有些包可能以前有用到,但后期重构后又不需要的,但JAR包未被清除,造成依赖臃肿。
有没有一种工具可以统一管理所有的JAR包,可以自动的处理包与包之间的依赖关系。避免包的冲突。依赖的包可以自动加载。可以检测没有使用到的包,方便我们清理。
Maven的解决方案:
Maven是一个依赖管理工具
Maven引进一个基础概念,坐标系统。让世界上的每一个JAR包都有一个独一无二的坐标。这样它就可以通过坐标准确地定位每一个构件(Artifact)了。Maven给这个类库世界引入了经纬,让它们变得有秩序。
在这个基础上,有序地管理依赖便可得到问题。
为了实现每一个构件都有一个坐标,推行该标准。Maven为全世界的JAVA开发者提供了一个免费的中间仓库,在其中几乎可以找到任何流行的开源类库。只有定位了坐标,Maven就可以帮我们自动下载对应的JAR包。
Maven的中间仓库地址:
http://mvnrepository.com/
Artifact Junit坐标范例:
junit
junit
4.12
test
约定优于配置(Convertion Over Configuration)的思想:
约定优于配置(conventionover configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。
本质是说,开发人员仅需规定应用中不符约定的部分。例如,如果模型中有个名为Sale的类,那么数据库中对应的表就会默认命名为sales。只有在偏离这一约定时,例如将该表命名为”products_sold”,才需写有关这个名字的配置。
如果您所用工具的约定与你的期待相符,便可省去配置;反之,你可以配置来达到你所期待的方式。
许多新的框架使用了约定优于配置的方法,包括:Spring,Rubyon Rails,Kohana PHP,Grails,Grok,Zend Framework,CakePHP,symfony,Maven,ASP.NETMVC,Web2py(MVC),Apache Wicket。
这是一个古老的概念,甚至在Java类库中也可以找出这一概念的踪迹。例如,JavaBean规范非常多的依赖这一概念。下面摘录JavaBeans 1.1版规范的一段:
按照一般的规则,我们不希望造出一个奇怪的java.beans.everything类,其他类需要从该类派生。而是希望在运行时JavaBeans为一般的对象提供缺省的行为特征,但是允许对象通过继承特定的java.beans.something接口来覆盖缺省的行为特征的一部分。
Maven使用“约定优于配置”的思想
Maven约定的项目结构如下图
只需配置很少的信息,Maven就可以自动完成编译、测试和打包等工作。
关联的思考:
Maven的思想,让我想到,在我们公司是否也可以将所有项目实施案例信息及方法收集总结,然后从实践中提炼成一套标准的实施方法。
同时为这套实施方法定义行业及版本,结合目前最前沿的管理思想,其它公司的实施方法论进行改进,优化。
建立一个小组专门对实施方法进行标准化,改进,优化。从理论,流程,组织方式,每个阶段的文档标准。
这样做的好处是,这套标准将会是公司日积月累最大的财富,每一个新人来后,可以在最短的时间内上手。节约培训成本。实施方案的优化可以加速项目实施的进度,提高项目实施的成功率。从而创造更高的价值,企业知名度。