应用maven的感想

乱世盼英雄

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

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

开发人员掌握的技术更复杂了,项目用得的技术自然也是更复杂,例如一个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,你可能需要思考一下,是否你使用了 不恰当的方式管理的代码,或者你落伍了?

时间: 2024-10-22 21:01:03

应用maven的感想的相关文章

Maven入门(含实例教程)

原文地址:http://blog.csdn.net/u013142781/article/details/50316383 Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.接下来小宝鸽,将从下面几个方向介绍maven: (1)Maven简单介绍 (2)Maven安装与配置 (3)Maven携手eclipse构建项目 (4)Maven的常用命令 (5)Maven实例 猿友门抓紧了,马上起飞了: (1)Maven的简单介绍 Maven这个个项目管理和构建自动

使用maven 容易遇到的问题

项目中使用了maven,而且搭建了nexus 私服. 经常会遇到如下问题: (一) 使用maven构建的项目下面都有一个pom.xml文件,里面设置了该项目的依赖的jar包.第一次因为没有联网或者nexus服务未启动,导致下载jar失败,以后依然下载失败.后来终于找到了原因: 因为第一次下载失败时,会在C:\Users\huangwei\.m2\repository 中生成对应jar包的lastUpdated文件,如xwork-core-2.1.6.jar.lastUpdated.因为有这个la

关于maven多项目之间的引用问题

问题描述 关于maven多项目之间的引用问题 现在是我的test-rop maven web中想引用 api接口中的一个server方法 我如何建立依赖关系才能引用到呢?我将api建到了web的依赖中了 但是还是引不到 这是我web的pom.xml中引用的配置 是通过maven生成的 <dependency> <groupId>com-lyl-base-api</groupId> <artifactId>com-lyl-base-api</artifa

maven surefire-maven-surefire-plugin使用

问题描述 maven-surefire-plugin使用 maven-surefire-plugin到底怎么用啊??网上找资料就说在控制台运行mvn test就可以了...到底在哪运行啊?请教下到底怎么用,从第一步开始. 解决方案 首先安装maven,然后在工程pom.xml配置maven-surefire-plugin.

the exception &quot;Failure to transfer org.apache.maven:maven-parent&quot; about Maven

   今天使用Maven碰到了这个异常,异常信息如下: Html代码   Failure to transfer org.apache.maven:maven-parent:pom:17 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has ela

maven pom聚合与继承

说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构.分模块开发,来提高代码的清晰和重用.针对于这一特性,maven也给予了相应的配置. 情景分析一: 我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可

转 maven常用内置变量

Intro Because I couldn't find a clear overview of which properties are availabe in maven2 I started this page. It is a collection of things found in the offcial maven documentation and postings to the maven user mailing list. Note: In Maven 3.0, all 

【转载】Jenkins + Git + Maven + tomcat集成环境搭建

本文转载自http://shift-alt-ctrl.iteye.com/blog/2208786   折腾了好几天,终于吧Jenkins + Git + Maven + tomcat集成环境搭建起来了,最终主要实现"自动构建.部署"web应用.   1.安装环境     操作系统:Centos 6.5     JDK:1.7.x     Maven:3.1.x     Git: 1.7.1,自建GitLab平台     tomcat:7.x       上述宿主机器2台:192.16

常用Maven插件介绍(下)

转自:http://www.infoq.com/cn/news/2011/05/xxb-maven-8-plugin     我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的