热门标签 | 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的思想,让我想到,在我们公司是否也可以将所有项目实施案例信息及方法收集总结,然后从实践中提炼成一套标准的实施方法。

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

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

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

 

 

 

 

 

 

 


推荐阅读
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 探讨 jBPM 数据库表结构设计的精要与实践
    探讨 jBPM 数据库表结构设计的精要与实践 ... [详细]
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社区 版权所有