拿Java来说Q构Z个项目的问题有一下这么几个:
现在Q有一些hq是在用IDE来进行项目的配置理的,它的~点是什么呢Q?/p>
现在Q大多数的Java开发h员都采取了用Ant脚本q行构徏的方式。因为Ant脚本Q?/p>
但是QAnt脚本也不是一点儿问题也没有。首先,Ant脚本的重用性不好。一般意义上的Ant脚本重用Q就是Copy&Paste。AntҎ没有什么封装。其ơ,Ant使用h也比较困难,XML格式的脚本不是十分的好写Q有了Eclipse支持以后Q强了很多)Q作本语aQAnt非常的不完善Q连字符串处理的功能都非常弱Q这一点Ant-Contrib提供了一些好一点儿的支持)。Ant的扩展机制完全基于JavaQ不能做到即时修攏V?/p>
除了AntQ在Java中,q可以采用Mavenq行目的构建。Maven目是一个非常出色的目。首先,它体CApache资深开发h员的目l织和管理智慧。另外,它以l一有效的方式实C目的整个构建生命周期。Maven的黑盒化操作也给目的配|管理减M负担。如果采用了Maven的话Q项目的l织方式、项目的构徏方式、项目的发布控制全部q刃而解。而且你所作的扩展Q也是以插g的方式来透明化的起作用的。重用性比Ant高很多。用v来也非常ѝ?/p>
但是QMaven也ƈ不是没有~点。首先,Maven的项目组l方式是固定的,虽然q种固定的方式确实非常有道理。但是,如果与现有项目不兼容或者与IDE的项目组l方式不兼容的话Q那么就完全不v作用了。比如Eclipse的Plugin目QPDE的项目组l格式就与Maven2的项目格式完全不兼容。而且QMaven2自n的Manifest文g生成功能比较弱,对于OSGI目而言Q根本没有可用性(因ؓ要造成重复工作Q。由于Maven采用的是黑盒操作方式。操作不透明。你如果想作一些简单的自定义操作,也必d一个Maven的插件。插件的试、调试和修改都要比Ant困难得多?/p>
那么有什么好办法呢?我推荐采用Ruby?/p>
首先QRuby是一U脚本语aQ支持的环境有很多,而且q可以采用JRuby来运行。而且QRuby支持一个类似Make语法的脚本语aQ那是Rake?/p>
Rake脚本其实是标准的Ruby脚本Q拥有所有Ruby拥有的特性(面向对象{)。而Ruby也有非常好的依赖控制pȝGemQ我个h认ؓ比目前的Maven的依赖控制系l要好)。由于Ruby是标准的解释型语aQ所以操作都是非帔R明的,也可以做到即时修改的效果。所以,用来作构本是非常合适的?/p>
但是Q怎么用它来构建Java目呢?现在已经存在一个基于Rake的Java构徏pȝ了,那就是:Raven?/p>
Raven除了提供一些处理Java的Rake Task之外Q它q提供了对Maven Repository的Gem装Q这P你就可以采用Gem的方式来获取Java的项目依赖了?/p>
Rake是我所看到的第一个用面向对象语言来写构徏脚本的。但是,它也q不是完全没有缺点的Q对Java的支持太,是一个很讨厌的缺炏V?/p>
如果惌采用RakeQ而且q要做到象Maven那样好,那么臛_要有以下几个功能Q除去Raven已经提供的功能)Q?/p>
目前我能惛_的办法只有一个,是自己写(呵呵Q。大家有什么高见?
目开发过E模型就是对于项目开发过E的概念建模Q从而能够实现在理论上对于Y仉目开发过E进行量化分析?/span>
软g开发过E模型以 Rational Unified Process Q简U?/span> RUP Qؓ代表Q如下图
?/span> 1 ?/span> Rational Unified Process
但是也ƈ不是只有 RUP 一U,比如 Agile Unified Process ( U?/span> AUP)
?/span> 2 ?/span> Agile Unified Process
M来说Q?/span> RUP 是最l化的项目开发过E模型,不管你采用什么样的开发方式,整个开发过E的每一个过E你都是无法逃掉的(我们后面会讨个)Q因代表了整个Y件开发实늚客观规律Q只是在定义上有所不同Q侧重点上有所不同Q对于P代的看法有所不同|了?/span>
如同它的概念所C,软g目开发过E就是对软g目开发过E的概念建模Q从而能够实现在理论上对于Y仉目开发过E进行量化分析?/span>
那么Q这U量化的分析到底有能有什么好处呢Q?/span>
我们在引子里说过QQ何的软g目都有它存在的目的Q都是ؓ了解决一些现实中的问题。可以把q个成ؓq个目的目的,可以把需要解决的问题的需求称作这个项目的需求?/span>
而对于商用(其是企业应用QY仉目开发而言Q最基本也是最重要的目的就是以最的成本Q?b style="">在项目交付的期限?/b>Q提?b style="">E_的、可靠的软gQ用?b style="">解决用户提交的所需要解决的问题Qƈ且如有可能,必须为现实生zM问题的变更引L用户需要解决的问题的变更从而要求的软g功能的变更做好准备?/span>
l Z能够把客L问题描述清楚Q必进行业务徏模和需求收集;
l Z能够把收集完的问题需求{变成为可以信息化解决的问题ƈ且解冻I必须对其q行软g化设计ƈq行实现Q?/span>
l Z保证软g产品的质量,必须q行_多的试Q看看硬件厂商是怎么试的?Q;
l Z能够让Y件品正常运转,必须q行软g的部|Ԍ
l 而在软g开发的q程当中Q对于项目的理、代码的理、还有资源的理Q在哪一个Y仉目开发中能缺?
lgQ对q些q程的徏模和定量的分析,q且定在整个开发过E中各个阶段所占的份额和所拥有的重要性,对于保证目Q尤其是大项目)的^E_发和增强目开发管理有着重要的作用?/span>
q且Q确定了目开发过E模型,对于定目理方式和提供技术、工h持有着非常重要的作用?/span>
既然我们已经有了一个明的定义Qƈ且能够把它分解成为几个部分(当然Q我们将会看刎ͼq些部分本n也是十分复杂的)。那么,看上M一步,我们的Q务就是一步一步的分析每一个部分?/span>
但是Q且慢,q些部分有些是没法讨论的Q比如业务徏模,它与用户的域专家有关Q或者跟一些国家、国际标准有养I跟计机软g开发没太多的关pZ—除非是 IDE 之类的)Q有些是仁者见仁、智者见智的部分Q比如设计和实现Q,有一些可以不必花太多口舌去讨论(比如软g目的部|和资源理Q,q一?/span> AUP l我们开了个好头Q我们现在需要讨论的是Q?/span>
l 需求分?/span>
l 试
l 配置理
l 目理
但就是这么几个,p够我们讨论的。事实上Q如果能够对q些问题都全面的分析q且提出自己的见解和解决Ҏ的话Q分量够一个博士论文(L重量上差不多Q,也许那样我可以出本书Q呵呵,玩笑?/span>
我只能尽力的往下分析,但是Q我更希望的是大家能够有所反馈。因为,在Y件设计中很多问题都是隐藏的(像地雷一PQ直Ct上它ؓ止,你都不会发现它?/span>
我很希望能够有反馈我避免低U的错误?/span>
M的Y仉目的开发都必然M开了解需求、根据需求进行设计、根据设计进行实现这些过E。不是多大的项目,也不是采用何种开发方式?/span>
一个h几天可以完成的目和几个小l好几个月才能完成的目相比Q它们面临的实际中的开发问题,和开发结束后面的维护问题都是不可同日而语的?/span>
而且Q技术的角度上看Q适合大的目的开发方式也未必一定适合的目?/span>
好了Q说了这么多Q我只是惌Q?/p>
lg所qͼ软g开发过E是一个非常复杂的问题Q对于做技术的人来_其是做计算Y件技术的人)Q解决问题的方式只有一U,分析问题、根据问题设计解x案、然后实现解x案来解决问题Q解x案未必一定是软gQ?/p>分析问题的第一步,是把现实中的东西{换成为概忉|型,q样我们才有一个讨论和研究的^台。如果没有一个明的l一的概忉|型,那么Q无论做什么研I会显得毫无意义(古代的智者和诡辩经常这么干Q?br />
既然我们面的问题是软g目开发,那么我们W一个要做的是把它建模Qƈ且对它进行一下研I?br />
我会在接下来几篇文章中对它进行详l的阐述Qƈ且针Ҏ在项目开发中的一些经验、ȝ和思考提出我对这个问题设计的解决Ҏ?br />
目的只有一个,希望针对q个问题作出一些探讨。希望能够抛砖引玉?br />