`
zhaolei415
  • 浏览: 169386 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
开始接触一个项目用的是Maven(一套项目管理框架)看了一片博客文章觉得不错,摘抄如下:
对了注明作者
(原作者温少,转载请注明)

应用maven的感想
使用maven2一段时间了,我基本把我自己能够迁移的project都转换为maven2 project,以下是我的一点感想。


乱世盼英雄

现在的软件开发,比过去的软件开发要复杂得多。包括在参与开发的人数、代码规模、复杂的需求、依赖包的复杂性、使用到更多的技术、多个项目之间的复杂依赖关系。

现在的开发人员,要掌握的技术要比过去的开发人员要多,不是现在的开发人员比以前的开发人员本身更优秀,而是拥有更多的资料、更多的学习机会、更多更大规模的时间,同时软件行业也在发展。说一句题外话,老程序员,如果不与时俱进,靠老本,是无法和新一代程序员竞争的,当然,老程序员,拥有更多的经验,掌握新技术的速度更快,这又是另外一回事。

开发人员掌握的技术更复杂了,项目用得的技术自然也是更复杂,例如一个web项目,可能使用到很多技术,面向对象、泛型、or-mapping、依赖注入(spring-framework)、全文检索(lucene)、数据库、集群、工作流、web service等等。

由于使用了多种技术,这些技术可能是JDK提供的,也可能是第三方开源组织提供的,或者不同的商业公司提供的。

于是出现了一个新的难题,就是包依赖复杂性。以前,你很难想象你的代码依赖数十个不同开源组织、商业公司提供的库。例如,我们经常使用的log4j、junit、easymock、ibatis、springframework,每个组件都有悠久的历史,存在不同的版本,他们之间版本还有依赖关系。

项目依赖的复杂性,经常的,一个较大部门有10-30个项目是常事,项目之间有不同版本的依赖关系,部门与部门之间的项目也存在复杂的版本依赖关系。

Eclipse本身提供Project的依赖,但是简单的依赖显然解决不了问题。例如Project B依赖Project A,Project A依赖第三方的jar包abc-1.0.jar,那么需要在两个项目的lib下都存放abc-1.0.jar,这产生冗余,当Project数量多起来,这个冗余就产生了管理问题,如果需要将abc-1.0.jar升级为abc-1.1.jar,则需要在两个Project中同时修改,如果Project数量达到10个以上,而且是不同项目组维护的项目,这个就是非常麻烦的事情。而且Project A修改依赖,为啥需要Project B也作相应的修改呢?

需要解决此问题,就需要在Project A的包中描述其依赖库的信息,例如在META-INFO记录所以来的abc-1.0.jar等。Eclipse的plug-in拥有类似的方案,但是这样一来,就使得开发Project B的项目组,需要把Project A的代码从源代码库中check out出来。在依赖链末端的项目组是很惨的。

由于Project数量众多,关系复杂,dailybuild的ant脚本编写成了很麻烦的事情,使用Project依赖的方式,更加使得编写dailybuild ant script是非常痛苦的事情。

当然也可以不使用project依赖的方式,而使用artifact lib的依赖方式,但是artifact lib的依赖方式,就是同时修改多个project,互相调试时带来了痛苦。

在以前,我们面临这些问题时,唯一的感觉就是,这事情TMD的太麻烦,几乎是失控了。

maven的出现,解决这种问题看到了希望。maven出现的原因就是,现在的开发管理复杂度达到了一定程序,需要专门的开发管理工具,这样的工具需要涵盖开发的各个阶段,包括工程建立、配置依赖管理、编译、测试、产生分析报告、部署、产生制品等阶段。目前,各个阶段的工具都存在,但是不是集成的,对使用带来了很大麻烦。maven集成了这些工具,提高了统一的环境,使得使用更简单。

现在maven非常流行了,apache上所有java project都已经build by maven,其他跟进的开源项目非常多,例如mule、hibernat等等,商业公司也很多在采用,sun公司提供有maven2 repository。

现在,2007年,如果你还没采用maven project,你可能需要思考一下,是否你使用了不恰当的方式管理的代码,或者你落伍了?

maven的一些常用任务
compile 编译代码
test 运行单元测试
package 打包代码
site 产生报告,例如java doc、junit的通过率报告和覆盖率报告、findbugs的分析报告等等。
assembly 使用需求产生assembly,例如把生成一个程序目录,包括bin、config、lib、logs,把依赖包放在lib中。
deploy 部署制品到repository中。

这些都是常用的任务,在以前编写脚本很麻烦,现在在maven中,一切都是很简单,需要仔细设置时功能又强大到令人惊叹,例如site的fml,assembly。


maven资源库
maven官方提供了一个常用lib的资源库,包括apache的所有java项目,开源常用的基本都能够找到,例如mule、c3p0、easymock、hibernate、springframework、json等等,版本齐全,任你挑选。

可以部署本地资源库代理提高下载速度。使用maven proxy。


maven体系结构

maven使用plug-in的体系,使用很好的自动更新策略,本身用到的jar都是lazy download的,可以指定download的repository。这样,初始下载的maven是一个很小的程序,使用的时候从本地的资源库或者本地代理资源库高速下载lib。maven的插件体系,充分利用了internet的资源丰富和局域网的高速带宽,使用本地repository时,可以享受到每秒钟数M的下载速度,感觉就是,人生真是美妙!

elcipse的plug-in体系,就不是那么好用了,我们使用eclipse的find and install功能下载或者更新插件时,慢如蜗牛,依赖缺失时的烦恼,更新一个plug-in,可能耗费你数个小时,第三方的plug-in的下载服务器可能更慢,例如subversive的plugin-in,有一次我花了两天还没下载好,只好使用下载工具下载好,copy到plug-in目录下。此时,我们总是感叹,人生总是有很多烦恼事啊!

相比之下,高下立判!在此我不是说eclipse的plug-in体系结构设计不好,eclipse的插件体系非常优秀,但是还有很大改进空间!
分享到:
评论

相关推荐

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    ** Maven 概述** Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过使用一个统一的构建过程,简化了项目的构建、依赖管理以及文档生成等任务。Maven 3.5.2是Maven的一个稳定版本,包含了众多...

    开源工具Maven3.9.4版本压缩包

    Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven...

    Maven全版本资源,Maven 3.0.5-3.8.5,每个版本包含4个文件,Maven3全资源打包下载,Maven全集

    apache-maven-3.0.5 apache-maven-3.1.1 apache-maven-3.2.5 apache-maven-3.3.9 apache-maven-3.5.4 apache-maven-3.6.3 apache-maven-3.8.5 每个版本包含4个文件: apache-maven-3.8.5-bin.tar.gz apache-maven-...

    apache-maven-3.6.0_apache-maven-3.6.0_maven压缩包_maven3.6.0下载_

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和文档。Maven 3.6.0是该工具的一个稳定版本,提供了许多改进...

    Windoiws的maven3.8.8

    **Windows环境下Maven 3.8.8的安装与配置** Maven是Apache软件基金会开发的一个项目管理和综合工具,主要用于Java项目的构建、依赖管理和文档生成。Maven 3.8.8是Maven的一个版本,它包含了对之前版本的一些改进和...

    apache-maven-3.6.2_maven_

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和依赖关系。Maven 的核心理念是通过标准化的构建生命周期和...

    maven 3.8.8 解压安装版

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,...

    maven3.6的安装包

    ** Maven 3.6 安装与配置指南 ** Maven 是一个强大的项目管理工具,主要应用于Java开发领域。它简化了构建、依赖管理和项目生命周期的管理,通过使用一种标准化的项目对象模型(Project Object Model,POM)来描述...

    Maven3.6.3安装与配置以及IDEA2022.2.3部署Maven的教程

    ### Maven 3.6.3 的安装与配置详解 #### 一、Maven 3.6.3 的安装步骤 **1.1 确保 Java 环境已安装** - **前提条件**: Maven 是 Java 项目构建工具,因此在安装 Maven 之前,请确保您的计算机上已经正确安装了 ...

    maven3.2.5安装包下载

    Maven最新版是款项目管理和构建自动化工具。Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)。 安装...

    Mac的maven安装包apache-maven-3.6.3.zip

    在IT行业中,Maven是一个非常重要的工具,尤其对于Java开发者来说,它是项目管理和构建的首选。本篇将详细讲解如何在Mac系统上,特别是配备M1芯片的MacBook上安装Apache Maven 3.6.3。 Apache Maven是一个基于项目...

    最新Maven版本:apache-maven-3.6.0

    Apache Maven 是一个强大的Java项目管理工具,它极大地简化了构建、依赖管理和项目文档的生成过程。Maven 3.6.0是该工具的一个稳定版本,提供了多项改进和新特性,旨在提高开发效率和增强项目的可维护性。 Maven的...

    超全面搭建Maven仓库

    ### 超全面搭建Maven仓库 Maven是一款强大的项目管理工具,主要用于Java项目的构建、依赖管理和项目信息管理。本文将详细介绍如何搭建Maven环境、配置Maven仓库以及在Eclipse中集成Maven。 #### 一、下载安装Maven...

    maven.rar apache-maven-3.5.4

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM),能够管理项目的构建、报告和文档,通过一套统一的构建生命周期和插件系统,极大地简化了软件...

    maven3.1、maven3.2安装包、源码及eclipse整合插件

    Maven是Java开发中的一款强大的构建工具,它管理项目依赖、构建生命周期和工件发布。这里我们关注的是Maven 3.1和3.2版本的安装包和源码,以及如何将Maven与Eclipse集成的插件。下面将详细介绍这些内容。 1. Maven ...

    maven历史版本下载

    Maven是Java开发领域中不可或缺的项目管理和构建工具,由Apache Software Foundation开发并维护。它通过一套规范化的构建过程,使得Java项目管理变得简单而高效。本篇文章将深入探讨Maven的历史版本以及如何下载这些...

    MavenRunHelper.zip

    《MavenRunHelper:构建与管理Java项目的专业助手》 MavenRunHelper,正如其名,是一款专为Java开发者设计的Maven辅助工具,旨在简化Maven项目的运行和管理过程。Maven作为Java世界中广泛使用的项目管理和构建系统...

    maven资源 apache-maven-3.3.9-bin.zip

    Apache Maven 是一个强大的Java项目管理和综合工具,它简化了构建过程,通过标准化构建生命周期和依赖管理,使得开发者能够更高效地构建、测试和部署Java应用程序。Maven 3.3.9是Maven的一个稳定版本,它包含了多个...

    apache-maven-3.5.2

    Apache Maven 是一个强大的项目管理工具,广泛用于Java应用程序的构建、管理和依赖管理。Maven 3.5.2是该工具的一个稳定版本,专为Mac操作系统优化。在本文中,我们将深入探讨Maven的核心概念、功能以及如何在Mac...

    apache-maven-3.8.6.zip

    apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-...

Global site tag (gtag.js) - Google Analytics