`
fujohnwang
  • 浏览: 156952 次
社区版块
存档分类
最新评论

数数自己经历过的几种项目构建工具

    博客分类:
  • Tech
阅读更多

Table Of Content

一提到项目构建, 对于Java开发人员来说, 最先跃入脑海的自然当属ANT, 所以, 就先从俺ANT的经历开始...

1. ANT先行

要说当年我的那个ANT用法,真的不是啥名门正派的用法,更多的是为了避免过多的重复劳动而已, 不过,这应该也算是ANT存在的一种意义吧,呵呵

当年CREDIT发行的时候采用可以单独运行的exe形式, 所以, 每次发行的时候,需要使用IntallAnywhere打包并制作安装文件, 安装文件的结构以及针对不同安装版本和环境的配置文件的准备工作, 如果每次都来一遍,会很费劲,所以,就写了个ANT脚本来做这些事情, 这样, 每次ant release之后,直接从InstallAnywhere里把构建好的安装目录结构和相关文件导入,然后点击制作安装文件就OK了[1 ]

所以,你看,我的ANT经历并不是真正意义上的那种项目构建和管理经历,更多的是为了用它来简化日常的工作,至于你什么dailybuild, 集成测试啥的,那个时候(4,5年前)不上也没人说你水平菜,呵呵

2. Eclipse那囊括一切的宽广胸怀

如果整个项目组或者整个公司都使用Eclipse进行开发的话,那么,下面这样的过程说不定你就会感觉很熟悉了。(下面更多提及项目的依赖管理,至于项目的building以及生命周期管理之类, 略去不表吧,整个话题会不完整,所以,只是会简单提及一下)

Eclipse有自己的builder体系, 所以, 不用ANT, 直接使用Eclipse的builder体系来完成项目的构建, 管理得当,也很不错的,起码我认为是, 在那套生态体系下的生活经历让我深信不疑,呵呵

在Eclipse里管理项目的依赖关系通常有两种方式。第一种方式就是创建本地依赖库, 让各个项目直接依赖本地依赖库。 如果单人单机开发,这种方式是合适的,可一旦推广到多人多机, 那就来问题了:

  • 每人的本地依赖库的具体情况可能千差万别,提交到版本控制系统(比如CVS)之后, 没有一个统一的标准, 这样,当A提交了自己的本地依赖库信息之后, B又来update依赖信息的时候, 可能就会出现B的本地没有和A相同的本地依赖库的情况, 诸如此类。

  • 无法集中管理,存在冗余, 版本信息混乱, 等等...

既然第一种方式存在这些问题,那么就有了第二种方式。

第二种方式应该是很普遍的, 为了解决第一种方式中碰到的一些依赖问题, 我们通常会在新建项目的时候,同时建立一个lib目录,其中保持项目所依赖的各方类库, 这样,提交到CVS之后, 每个开发人员check到本地的项目拷贝,就会持有统一的项目依赖了。这种方式很好的解决了第一种方式中提到的第一个问题, 不过, 也并不完美:

  • 所有的项目依赖将被提交到CVS等版本管理系统中,会占用很多CVS Repository空间;

  • 单一项目还好说, 随着项目和模块的增多, 相同的依赖就会散落到不同的项目中, 造成CVS空间浪费不说, 依赖的存在也显得冗余;

  • 针对每个依赖的各方类库没有合适的版本管理机制,比如这个项目依赖hibernate2.x,而另一个可能依赖hibernate3.x, 当合并两个项目发布的时候, 可能因为这种依赖类库详细版本信息的缺失,造成问题;

看来, 第二种方式也不完美啊, 不过,没关系,发现问题是好事儿,解决掉他们就好了!

3. 集中式依赖管理时代

解决冗余问题一直都是我们为之奋斗的目标, 为了解决以上依赖管理过程中出现的种种问题, 我们现在要寻求一种集中式的依赖管理方式。这里面最为业界称道的当属Maven啦, 不过,我倒是乐意顺道再提及一个花旗内部使用的XENV, 它也是用来完成类似任务的。

Maven和XENV都采用集中中央依赖库的方式来管理依赖关系, 这样, 各个项目只要通过统一的依赖描述文件来指定自己需要的依赖就可以, 而不用自己来管理真正的依赖库,因为所有的项目都使用同一个中央依赖库, 所以即使各个项目中有相同的依赖, 也不会出现依赖冗余的问题。

在这里想对maven和xenv各自的特性多唠叨几句。Maven在集中式依赖管理时代属于比较典型的产品, 它不但支持传递的依赖关系管理, 而且支持本地的依赖缓存, 其它像插件化管理, profiles支持等等,整体上来说,比较成熟。 xevn属于花旗内部的一个依赖管理和项目构建环境, 这个环境以unix环境下的开发为出发点, 对项目构建的生命周期管理比较完备, 有完备的代码提交和审查机制, 不过,它没有本地的依赖缓存功能, 这在具体开发过程中会造成一定的不便,比如, 中央库的服务器和开发人员处于统一局域网内,那网络延迟还可以接受, 一旦网络跨度达到跨洲, 那网络延迟就会让基于xenv的依赖管理变得不可忍受, 这时候, 如果有本地依赖缓存库的支持,情况就会很好。 为了缓解这种情况,我看到的是,采用了eclipse中各自建立本地依赖库的方式, 至于缺点,我想就不用再说了。 另外, maven支持依赖库的版本管理,xenv没有。

4. ANT+IVY组合

Maven的理念和实现方式跟ANT有很大的不同, 所以, 从ANT到Maven的迁移成本还是不小的。如果你不想迁移,却依然想要享受到maven类似的中央依赖库功能,那么可以考虑ANT+IVY这一魅力组合。

IVY提供了类似Maven的中央依赖库依赖管理方式(通常是直接用Maven的某些中央依赖库),使用Ivy,你同样只需要为每个项目提供相应的依赖描述文件, 之后, Ivy将通过settings.xml的描述信息,到某个中央依赖库为你的项目抓取相应的依赖,基本上跟Maven类似的做法, 只不过, 借用了Maven的“骨肉 ”, 用ANT支撑一下, 也成了一套比较有特色的解决方案。

Spring3的构建和依赖管理采用的就是IVY+ANT的组合方式。

5. 后话

基本上也就是些鸡毛蒜皮的回忆文字, 当初Maven1的年代,对这东西还真没啥好的印象,现在PT用Maven2来管理所有的项目构建和依赖管理, 我也只能入乡随俗了, 故此,把之前的和现在的东西扒拉一下,聚成这篇文字, 算作纪念吧!

 

PS. 像Make, Rake之类的, 零星玩过的就飘过吧!



[1 ] 当然,实际上, 你也可以在Ant脚本里直接调用installAnywhere提供的命令行形式,而不启动带GUI的Installanywhere进程,这样,直接一条命令全部搞定。

 

1
0
分享到:
评论

相关推荐

    我的VB制作程序,几个日常使用的小工具

    在"我的VB制作程序,几个日常使用的小工具"中,我们可以推测这些示例程序可能包括了各种实用的小型工具,如计算器、日历、记事本等。这些小工具展示了VB在构建简单但实用的应用程序上的能力,同时也可能是作者学习...

    数字电子技术课件

    4. **利用现代工具**:学习并熟练使用现代设计工具,例如硬件描述语言(VHDL、Verilog HDL)、EDA软件等,这些工具可以帮助进行电路设计和仿真,提高学习效率。 5. **持续跟进最新技术**:数字电子技术发展迅速,不断...

    数字逻辑电路 Altera产品及其相关开发工具简介.docx

    Altera的开发工具经历了从MAX+PLUS II到Quartus II的演进。**MAX+PLUS II**曾是CPLD和FPGA设计的主流工具,而现在,**Quartus II**已经成为了Altera的主要开发环境,支持从CPLD到FPGA的所有产品,提供了一套全面的...

    前端面试技巧2017及自己亲身经历的的js笔试题

    11. **项目构建工具**:Webpack或Gulp等工具的使用,理解模块打包原理,以及如何配置和优化构建过程。 12. **单元测试与自动化**:理解单元测试的重要性,掌握Mocha、Jest等测试框架,以及自动化测试的实现。 13. ...

    UML建模工具,UML建模工具

    StarUML是一款开源的UML建模工具,它允许用户创建多种类型的UML模型,包括但不限于以下几种: 1. 类图(Class Diagram):类图是UML中最重要的图之一,它展示了类、接口、对象以及它们之间的关系,如继承、关联、聚合...

    cmake-3.21.0-rc2-windows-x86_64.zip Cmake工具包

    CMake不是一种编译器,而是一个构建工具,它可以生成适用于各种编译器和构建环境的项目构建系统,如Visual Studio、Makefile或者Xcode等。CMake的灵活性和可移植性使其在开源和商业软件开发中广泛应用。 标题中的...

    几种开源SIP协议栈对比

    ### 几种开源SIP协议栈对比 随着VoIP(Voice over Internet Protocol)技术和下一代网络(NGN)的发展,通信领域正经历从H.323标准向SIP(Session Initiation Protocol)标准的转变。SIP作为一种更简单、更灵活的...

    Ant1.9.14 基于Java的生成工具

    它的设计目标是简化项目构建过程,提供了一种可配置、可扩展的方式,使得开发者能够自动化执行编译、打包、测试等任务。Ant的工作原理与Unix的Make工具类似,但它具有更强的跨平台性,能够在任何支持Java的系统上...

    WinCE自制触屏调试工具

    2. DrawScreen2.vcb、DrawScreen2.vcl、DrawScreen2.vco、DrawScreen2.vcp、DrawScreen2.vcw:这些文件是Visual C++项目文件,用于构建和管理工程。它们记录了项目的编译设置、链接器选项、源代码组织等信息,帮助...

    简历模板工具

    一份有效的简历通常包括以下几个部分:个人信息(如姓名、联系方式)、求职意向、教育背景、工作经验、项目经历、技能证书、自我评价等。在“简历模板”中,这些部分通常被预先设定好结构,以便用户方便地填充内容。...

    基于FPGA 的数字时钟

    在这个项目中,数字时钟的设计涉及到以下几个关键知识点: 1. **时钟信号**:在数字系统中,时钟信号是所有操作的基础。一个稳定的时钟源可以确保系统中的数据同步和正确处理。在FPGA中,通常会有一个内部时钟发生...

    数字摄影测量商业软件对比

    Inpho作为一款专业的航空摄影测量系统,经历了从最初的版本到现在的持续改进和发展,逐步完善了其功能并提升了用户体验。 **优点** - **高度自动化的处理流程**:支持自动化的数据处理流程,极大地提高了工作效率...

    it项目计划阶段224 项目成员审核表.doc

    同时,这也是一种有效的沟通工具,确保所有团队成员对自己的角色有清晰的认识,从而提升团队的整体执行力和项目成功的可能性。在实际操作中,应根据项目特性和组织文化,灵活调整和定制项目成员审核表的内容,以达到...

    html 经历

    【HTML经历】这一主题主要涵盖了HTML(HyperText Markup Language)的学习和实践经验,它是构建网页的基础语言,用于描述网页内容和结构。这篇博文可能是作者在学习和使用HTML过程中的经验分享,可能包括了初识HTML...

    基于信息化的企业项目管理模式探讨.docx

    信息化作为一种关键工具,有助于企业在项目管理中实现更高效、更精确的控制,从而提高净利润和整体竞争力。 企业项目管理涉及多个环节,包括目标设定、立项分析、预算审批、项目启动、进度跟踪、变更控制、风险管理...

    php7 benchmark 工具

    在Web开发领域,PHP是一种广泛使用的服务器端脚本语言,尤其在构建动态网站和应用程序方面发挥着重要作用。随着技术的不断进步,PHP也经历了多个版本的迭代,其中PHP7带来了显著的性能提升。为了评估和比较不同PHP...

    UML建模工具及教程

    在UML建模过程中,我们通常会用到以下几种关键图表: 1. **用例图(Use Case Diagram)**:用例图展示了系统与外部用户(称为演员)之间的交互,它描绘了系统提供的功能或服务。 2. **类图(Class Diagram)**:...

    c语言编程工具总结

    本文旨在通过详细分析几种常用的C语言编程工具,帮助读者根据自身需求合理选择合适的学习和开发工具。所涉及的工具主要包括:Turbo C、Win TC、Visual C++、C-Free、Turbo C for Windows 和 WxDev-C++。 #### 1. ...

    数字科技时代融资租赁的生存之路

    融资租赁作为一种跨领域的综合性金融服务工具,其兼具融资与融物的特点使其能够直接服务于实体经济,促进存量资产的盘活、制造技术的更新以及产能结构的优化。这一特性高度契合了国家对于产业升级和结构调整的需求,...

Global site tag (gtag.js) - Google Analytics