热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Maven学习总结系列一:Maven的简介

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的简介

 

只需配置很少的信息,Maven就可以自动完成编译、测试和打包等工作。

 

关联的思考:

Maven的思想,让我想到,在我们公司是否也可以将所有项目实施案例信息及方法收集总结,然后从实践中提炼成一套标准的实施方法。

同时为这套实施方法定义行业及版本,结合目前最前沿的管理思想,其它公司的实施方法论进行改进,优化。

建立一个小组专门对实施方法进行标准化,改进,优化。从理论,流程,组织方式,每个阶段的文档标准。

这样做的好处是,这套标准将会是公司日积月累最大的财富,每一个新人来后,可以在最短的时间内上手。节约培训成本。实施方案的优化可以加速项目实施的进度,提高项目实施的成功率。从而创造更高的价值,企业知名度。

 

 

 

 

 

 

 


推荐阅读
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 本文探讨为何Request对象的外观设计被认为是精妙的,重点在于其如何利用门面模式确保数据安全,同时保持系统的高效交互。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • MVC模式下的电子取证技术初探
    本文探讨了在MVC(模型-视图-控制器)架构下进行电子取证的技术方法,通过实际案例分析,提供了详细的取证步骤和技术要点。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 深入探讨前端代码优化策略
    本文深入讨论了前端开发中代码优化的关键技术,包括JavaScript、HTML和CSS的优化方法,旨在提升网页加载速度和用户体验。 ... [详细]
author-avatar
金针菇滚滚夹着五根水葱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有