开发体系讨论作者:刘振新日期:2011年6月10日简介现阶段公司研发结构基于组件的研发体系Maven项目管理组件及产品版本管理Nexus仓库管理Hudson持续集成Junit单元测试体系【后续】ASN1讲解【后续】目标规范好公司后续产品的研发体系整理好公司服务器产品的公共组件国富安PKITool(PKCS封装)、国富安P11组件服务管理框架、WebServices组件公共日志组件、通信组件SAML组件、证书验证组件整理好公司产品研发的管理机制现阶段公司研发结构产品版本如何管理?使用第三方依赖组件如果管理?是否有公司的组件管理库?产品是如果生产的?研发内部单元测试是如何完成的?产品的全用例测试是如何完成的?基于组件的研发体系架构架构={组件、连接件、约束}组件组件可以是一组代码、也可以是独立的程序。连接件过程调用、管道、消息等。用于组件之间的联系。约束组件连接时的条件。简单组件模型实例简单CA用例模型实例CA组件划分演示业务处理流程License检查请求信息检查操作员权限检查证书状态检查模板检查日志记录证书申请证书更新证书注销证书冻结……组件开发带来的问题各个版本的组件如何管理?公司的公共组件如何使用?组件之间的关系如何管理?如果统一装配组件?开发体系结构MAVEN2引入概念模型Maven维护了一个项目的模型,你不仅仅需要把源码编译成字节码,你还需要开发软件项目的描述信息,为项目指定一组唯一的坐标。你要描述项目的的属性。项目的许可证是什么?谁开发这个项目,为这个项目做贡献?这个项目依赖于其它什么项目没有?Maven不仅仅是一个“构建工具”,它不仅仅是在类似于make和Ant的工具的基础上的改进,它是包含了一组关于软件项目和软件开发的语义规则的平台。Maven2主要功能构建项目(Builds)文档编制(Documentation)报告(Reporting)依赖管理(Dependencies)配置管理(SCMs)发布管理(Releases)了解Maven2Maven2的目标◦使项目构建构成更容易;◦提供统一构建系统;◦提供高质量的项目信息;◦提供开发的最佳实践指南;◦能无缝的加入新的特性;对Maven2的错误认识◦Maven2是一个站点和文档制作工具;◦Maven2扩展了Ant,使其可以下载到各种依赖包;◦Maven2是一系列可以重用的Ant脚本;Maven2监管项目生命周期Maven2如何工作构建项目Maven2可以构建哪些类型的项目:EARWARJARZIPEJB自定义格式说明:EJB项目=JAR项目Maven目录结构src/main/javaApplication/Librarysourcessrc/main/resourcesApplication/Libraryresourcessrc/main/filtersResourcefilterfilessrc/main/assemblyAssemblydescriptorssrc/main/configConfigurationfilessrc/main/webappsWebapplicationsourcessrc/test/javaTestsourcessrc/test/resourcesTestresourcessrc/test/filtersTestresourcefilterfilessrc/siteSiteLICENSE.txtProject'slicenseREADME.txtProject'sreadme使用标准目录的好处所有项目的构建必须遵从标准目录结构;使所有使用Maven2管理的项目从目录上看都是一样的;便于管理,便于协作;遵从业界统一标准,有助于团队管理;pom.xml的介绍开发人员不需要关注pom.xml中的内容;项目构建和管理人员需要编写pom.xml中的内容;配置项目之间的依赖关系;配置项目所需要使用的插件信息:如ejb,javadoc等等;如何配置一个依赖关系dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependency配置人员需要考虑使用什么JAR包?版本号使多少?所在生命周期是什么?给项目配置人员的建议自己先在本地将自己创建的项目创建成为EclipseIDE支持的项目(此过程将激活Maven2到本地资源库中查找依赖,如果依赖不存在则从网上的资源库下载,并放置到本地);项目构建完成之后将下载到新的依赖项目放到本地服务器上;将原Maven2构建成功的项目(不包含Eclipse特有文件:project,classpath文件)放到CVS上;给开发人员的建议自己从CVS上下载项目,在本地使用mvneclipse:eclipse命令,创建成EclipseIDE项目;不允许将EclipseIDE项目中特有文件传入CVS之上;每个开发人员在本地自行维护一份log4j配置文件(放在\src\test\resources之下),此文件不允许打包,不允许传入CVS之上;多模块企业级项目Maven开发演示Maven创建ca-parent项目创建CA的各个子模块项目将子模板的jar包发布到Nexus服务器【后面会讲解Nexus】将代码使用CVS管理关于组件版本项目版本majorversion.minorversion.incrementalversion-qualifier例如:版本“1.3.5”由一个主版本1,一个次版本3,和一个增量版本5限定版本用来标识里程碑构建:alpha和beta发布例如:版本“1.3-beta-01”有一个主版本1,次版本3,和一个限定版本“beta-01”。SNAPSHOT版本Maven版本可以包含一个字符串字面量来表示项目正处于活动的开发状态。LATEST和RELEASE版本仓库管理器仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理。其次它为你的组织提供了一个可部署你组织内部生成的构件的地方。Nexus的特性代理远程仓库。配置Nexus代理中央仓库,其它任何公开的Maven仓库,将你组织内部的Maven配置指向Nexus,这样所有构件都将从Nexus下载,如果Nexus没有你要的构件,它会自动先去外部仓库下载到本地,仅一次。本地宿主仓库。Nexus可以在服务器上建立本地的宿主仓库,你可以往这个仓库里提交任意的Maven规范构件,包括不能从公开仓库下载到的构件,或者你组织内部产生的构件。Nexus的特性仓库组。有了仓库组,你就能将很多仓库聚合起来,对外公开一个统一的接口提供构件服务。构件搜索。Nexus能下载远程的仓库索引,并在本地构件自己的仓库索引,有了该索引,你就能很快速方便的搜索任何你感兴趣的构件。事情RSS源。Nexus服务器上发生的几乎任何事情,你都能用RSS监视,方便管理。Nexus的特性Release和Snapshots区分。配置Nexus提供Release构件服务或者Snapshots服务,能更清晰的管理构件。路由。Nexus的路由能够管理为特定的请求提供特定的仓库。加入你在一个组中配置了很多仓库,一条路由能够极大提高某些特定请求的响应速度。Nexus的特性上传构件。使用Nexus你能很方便的在web界面上上传一些特殊的构件至仓库。高用户体验的UI。使用AJAX和REST技术开发的Nexus,在界面上为提供了很舒适的用户体验。NEXUS服务器演示演示仓库的管理创建自己的仓库将jar包发布自己创建的仓库使用自己发布到自己仓库的jar包Hudson持续集成持续集成介绍持续集成已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。Hudson持续集成Hudson帮助您的开发团队应对如下挑战:软件构建自动化构建可持续的自动化检查构建可持续的自动化测试生成后后续过程的自动化Hudson持续集成软件构建自动化使用CI,您只要按一下按钮,它会依照预先制定的时间表,或者针对某一特定事件,就开始对目标软件进行一次构建过程。想想吧,尤其您从头到尾构建一个构件的时候,这个构建过程应该不会是局限于某一特定IDE、电脑或者个人的。CI:ContinueIntegrationHudson持续集成构建可持续的自动化检查CI系统能够设定成持续地执行新增或修改后签入的源代码,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力(说直接一点也是钱啊,呵呵)。Hudson持续集成构建可持续的自动化测试一个构建检查的扩展部分,这个过程确保当新增或修改代码时不会导致预先制定的一套测试在构建构件后失败。构建检查和测试一样,失败都会触发通知单(Email,RSS等等)给相关的当事人,告知对方一次构建或者一些测试失败了。Hudson持续集成生成后后续过程的自动化一旦自动化检查和测试的构建已经完成,一个软件构件的构建周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。CI系统基本结构Hudson演示演示Hudson的基本功能后续安排Junit单元测试推广ASN1讲解结束感谢大家参加此次讨论Q&A