RCP delta Pack 硬盘干什么用的

基于PDE的RCP项目自动构建
持续集成包括软件项目的持续构建与发布,通过持续性地编译与构建,完成项目的不断集成。持续集成通常应用与WEB开发领域,对于RCP项目的持续集成目前业界较少。对于RCP项目的持续集成,就是通过定期执行项目自动构建程序来完成项目版本的集成与发布,重点在于项目的自动化构建。经过笔者的研究与学习,通过本文向大家介绍一种基于PDE的RCP项目自动化构建方式,希望大家多多交流。一、简介PDE&(Plug-in&Development&Environment)&headless-build是一种基于&Ant&脚本的构建方式,它主要适用于Eclipse&plug-in与&Eclipse&RCP项目的导出。由于headless-build是特定于&Eclipse&插件的构建平台,而&Eclipse&插件的编译构建都离不开Eclipse本身的类库与资源,因而运行headless-build之前,必须已经安装好带有PDE环境的Eclipse&SDK以及相应的插件。PDE作为Eclipse的一个插件项目存在于Eclipse中,且不同Eclipse下PDE实现的方式略有不同,本文以Eclipse3.5.1为例,介绍PDE&headless-build实现自动化构建的原理及示例。二、原理(一)headless-build核心库文件headless-build核心脚本文件都存储于&Eclipse&的&PDE&插件中。以Eclipse3.5.1为例,PDE&build&插件位于&plugins&目录下的&org.eclipse.pde.build&插件目录中。在此目录的&lib&文件夹中包含有&pde&build&库的核心类文件,其中包括了绝大多数和&PDE&build&相关的&Ant&task&的实现,有兴趣的读者可以在&org.eclipse.pde.source&源代码插件中看到相应的代码。对于我们的&build&任务,PDE&headless-build&的核心脚本文件位于&scripts&和&templates&两个目录下。scripts&文件夹中提供了&headless-build&的基础控制脚本。事实上无论是使用&headless-build&还是IDE&导出,我们都间接地通过执行这些脚本完成了一系列的过程。其中的&build.xml&文件是&build&过程的主脚本文件,在之前的启动命令中的&?buildfile&后的值就是此&build.xml&文件的路径。而&genericTargets.xml&则定义了在&build&过程的各个子过程的行为。templates&文件夹中则提供了一系列的模板库。您可在&templates&下的&headless-build&目录中找到前面所说的&allElements.xml、build.properties、customTargets.xml&文件的模板。您可以方便地将其拷贝和修改,用作您自己的构建配置文件。(二)headless-build&的工作流程和通知机制customTargets.xml&提供了对&headless-build&流程的多个节点的控制。而事实上&PDE&将&headless-build&分为多个子过程。customTargets.xml&正是针对了此些子过程提供了回调接口,以通知和触发用户定制的脚本被执行。以下是&headless-build&整体流程的简图。650) this.width=650;" title="图片1.jpg" src ="/images/loading.gif" original="/inc/test.jsp?url=http%3A%2F%%2Fattachment%2FF.jpg" />在其中,您需要提供的是最初的引入脚本(Ant&文件,批处理文件或命令行指令),之后&Eclipse&宿主会被启动并调用您指定的通常位于&PDE&插件&scripts&目录下的&build.xml,而此文件则会相应找到您在配置目录中定义的&customTargets.xml&文件,执行用户设定的回调脚本,并通过&customTargets.xml&调用&PDE&插件&scripts&下的&genericTargets.xml&启动&PDE&内部的各项子过程的执行代码。而在&genericTargets&中则定义了&headless-build&的4个子过程fetch、generate、process&和&assemble,下面我们对他们做简单的介绍。(1)FetchFetch负责从源控制中下载所需构建的插件项目的源文件。其过程如下:650) this.width=650;" title="图片2.jpg" src ="/images/loading.gif" original="/inc/test.jsp?url=http%3A%2F%%2Fattachment%2FF.jpg" />正如前文所述,customTargets.xml中包含了headless&build执行所有过程的预置以及回调接口,开发者可以在其中自己编写所需的自定义脚本。Fetch操作主要在于fetchElement操作,它会根据PreBuild中用户定义的源文件库的文件及地址映射的MAP来以次获取需要构建的项目源码。同时,fetch&taeget中有一个unless=”skipFetch”的属性,该属性表明当shipFetch存在时,fetch过程可以被跳过。(2)GenerateGenerate为每个插件分别生成自身的构建脚本。其过程如下:650) this.width=650;" title="图片3.jpg" src ="/images/loading.gif" original="/inc/test.jsp?url=http%3A%2F%%2Fattachment%2FF.jpg" />同样可以自定义预置及回调操作,generate的主要过程在于generateScript操作。该操作使用eclipse.buildScript方法为每个插件分别生成自身的构建脚本。(3)Process&process通过运行&generate&中生成的脚本,完成对每个插件的构建。其过程如下:650) this.width=650;" title="图片4.jpg" src ="/images/loading.gif" original="/inc/test.jsp?url=http%3A%2F%%2Fattachment%2FF.jpg" />Process过程主要调用prcessElement操作,该操作通过processViaFeature和processFlat两个过程完成对各个插件以及依赖插件的构建。(4)Assembleassemble将&process&过程中生成的插件打包。其过程如下:650) this.width=650;" title="图片5.jpg" src ="/images/loading.gif" original="/inc/test.jsp?url=http%3A%2F%%2Fattachment%2FF.jpg" />调用了assembleElement过程,根据Manifest清单中的依赖,把相关的插件集成到一起,打包发布为一个ZIP文件,该文件解压后点击.exe文件可运行。(打包后的的插件会被自动集成到宿主平台中)三、示例了解了PDE&headless&build的实现原理,我们可以为其量身打造自己的构建脚本。为了直接突出核心,我们对于获取代码管理工具上源码的部分就取消了,在配置文件中将SkitFetch和skipMap设置为true即可,接下来将把本地的RCP项目完成自动化构建。(1)新建一个Plug-in&Project,项目名称为com.rcpquickstart.helloworld,模板选择“RCP&Helloworld”,新建的步骤不做详细讲解,顺着向导操作即可。(2)新建一个Feature&Project,名称为com.rcpquickstart.helloworld.feature,其插件选择com.rcpquickstart.helloworld,新建的步骤不做详细讲解,顺着向导操作即可,完成的Feature结构如下:650) this.width=650;" title="图片8.jpg" src ="/images/loading.gif" original="/inc/test.jsp?url=http%3A%2F%%2Fattachment%2FF.jpg" />(3)在com.rcpquickstart.helloworld项目中新建一个Product&Configratiuon,名称为helloworld.product,新建完以后打开文件进行如下配置。650) this.width=650;" title="图片6.jpg" src ="/images/loading.gif" original="/inc/test.jsp?url=http%3A%2F%%2Fattachment%2FF.jpg" />接着为product添加功能部件(Feature),点击选项卡“Dependencies”,添加“com.rcpquickstart.helloworld.feature”和“org.eclipse.rcp”两个功能部件即可。到目前为止,我们的RCP产品项目配置完毕。(4)新建一个Java&Project,名称为com.rcpquickstart.helloworld.build,接着再新建两个文件“build.xml”和“build.properties”。该项目为自动构建插件项目,使用ant脚本。(5)编辑build.xml内容如下:&projectname=&com.rcpquickstart.helloworld.build&default=&build&&&propertyfile=&build.properties&/&&targetname=&init&&&mkdirdir=&${buildDirectory}&/&&mkdirdir=&${buildDirectory}/plugins&/&&mkdirdir=&${buildDirectory}/features&/&&copytodir=&${buildDirectory}/plugins&&&filesetdir=&../&&&includename=&com.rcpquickstart.helloworld/**&/&&/fileset&&/copy&&copytodir=&${buildDirectory}/features&&&filesetdir=&../&&&includename=&com.rcpquickstart.helloworld.feature/**&/&&/fileset&&/copy&&/target&&targetname=&pde-build&&&javaclassname=&org.eclipse.equinox.launcher.Main&fork=&true&failonerror=&true&&&argvalue=&-application&/&&argvalue=&org.eclipse.ant.core.antRunner&/&&argvalue=&-buildfile&/&&argvalue=&${eclipseLocation}/plugins/org.eclipse.pde.build_${pdeBuildPluginVersion}/scripts/productBuild/productBuild.xml&/&&argvalue=&-Dtimestamp=${timestamp}&/&&classpath&&pathelementlocation=&${eclipseLocation}/plugins/org.eclipse.equinox.launcher_${equinoxLauncherPluginVersion}.jar&/&&/classpath&&/java&&/target&&targetname=&clean&&&deletedir=&${buildDirectory}&/&&/target&&targetname=&build&depends=&clean,&init,&pde-build&/&&/project&从脚本可以看出,执行过程分为Clean、init、pde-build三部,Clean为清理构建的目标目录,即产品构建目录,init为新建构建目录结构,同时,将所需构建的插件项目以及其feature拷贝到相应的目录下(如果是依赖多个插件的话都需要执行拷贝)。Pde-build则是启动一个Eclipse进程调用pde构建。(6)build.properties内容如下:#&Version&of&org.ecilpse.pdebuildpdeBuildPluginVersion=3.5.1.R35x_#&Version&of&org.eclipse.equinox.launcherequinoxLauncherPluginVersion=1.0.201.R35x_vbase=c:/helloworld-build-targeteclipseLocation=F:/Install/PDE/eclipse-SDK-3.5.1-win32/eclipse#############&PRODUCT/PACKAGING&CONTROL&#############product=/com.rcpquickstart.helloworld/helloworld.productrunPackager=true#Set&the&name&of&the&archive&that&will&result&from&the&product&build.#archiveNamePrefix=archivePrefix=helloworld#&The&location&underwhich&all&of&the&build&output&will&be&collected.collectingFolder=${archivePrefix}configs=win32,&win32,&x86allowBinaryCycles&=&true#Sort&bundles&depenedencies&across&all&features&instead&of&just&within&a&given&feature.flattenDependencies&=&true#Arguments&to&send&to&the&zip&executablezipargs=#Arguments&to&send&to&the&tar&executabletarargs=##############&BUILD&NAMING&CONTROL&#################&The&directory&into&which&the&build&elements&are&fetched&and&where#&the&build&takes&place.buildDirectory=c:/helloworld-build#&Type&of&build.&&Used&in&naming&the&build&output.&&Typically&this&value&is#&one&of&I,&N,&M,&S,&...buildType=I#&ID&of&the&build.&&Used&in&naming&the&build&output.buildId=HelloWorld#&Label&for&the&build.&&Used&in&naming&the&build&outputbuildLabel=${buildType}.${buildId}#&Timestamp&for&the&build.&&Used&in&naming&the&build&outputtimestamp=007baseLocation=${base}/eclipsefilteredDependencyCheck=falseskipBase=trueeclipseURL=&url&for&eclipse&download&site&eclipseBuildId=&Id&of&Eclipse&build&to&get&eclipseBaseURL=${eclipseURL}/eclipse-platform-${eclipseBuildId}-win32.zipskipMaps=truemapsRepo=:pserver:anonymous@/path/to/repomapsRoot=path/to/mapsmapsCheckoutTag=HEAD#tagMaps=truemapsTagTag=v${buildId}skipFetch=true#############&JAVA&COMPILER&OPTIONS&###############&Specify&the&output&format&of&the&compiler&log&when&eclipse&jdt&is&usedlogExtension=.log#&Whether&or&not&to&include&debug&info&in&the&output&jarsjavacDebugInfo=false&#&Whether&or&not&to&fail&the&build&if&there&are&compiler&errorsjavacFailOnError=true#&Enable&or&disable&verbose&mode&of&the&compilerjavacVerbose=true需要注意几个关键配置:pdeBuildPluginVersion:PDE&BUILD的版本号,可以在Eclipse目录下的Plugin文件夹里找到org.eclipse.pde.build_3.5.1.R35x_文件夹,文件夹名后面的字符为PDE版本;equinoxLauncherPluginVersion:equinoxLauncher版本号,用于Eclipse项目构建的进程,其在Eclipse目录下的Plugin文件夹里找到org.eclipse.equinox.launcher_1.0.201.R35x_v.jar&,后面字符为其版本号;Base:RCP&runtime&Binary和Delta&Pack存放的目录路径,其二者包括了RCP运行时环境所需插件以及大量跨平台插件。eclipseLocation:执行构建的Eclpise路径Product:需要发布的Product文件buildDirectory:执行构建的目标目录,包括了构建时产生的文件skipMaps:true,跳过源文件的MAP获取。skipFetch:true,跳过从源代码管理工具获取源文件。(7)准备构建环境。根据配置文件中配置路径,分别在C盘建立“helloworld-build”和“helloworld-build-target”两个文件夹,同时,从eclipse官网上下载“eclipse-RCP-3.5.1-win32.zip”和“eclipse-3.5.1-delta-pack.zip”压缩文件,将其解压到刚才的helloworld-build-target目录下(相同的文件可以覆盖),下载地址:http://archive.eclipse.org/eclipse/downloads/drops/R-3.5.1-/index.php(8)执行build.xml,待构建完成后,在“/helloworld-build/I.HelloWorld”目录下找到HelloWorld-win32.win32.x86.zip,其为构建好的RCP项目,解压后目录结构如下:650) this.width=650;" title="图片7.jpg" src ="/images/loading.gif" original="/inc/test.jsp?url=http%3A%2F%%2Fattachment%2FF.jpg" />双击helloworld.exe可运行程序。&
文章评论 以下网友留言只代表其个人观点,不代表本网站的观点和立场。&&&&&target&name="rootFilessolaris_motif_sparc"&&&&&&&&&&mkdir&dir="${feature.base}/solaris.motif.sparc/${collectingFolder}"/&&&&&&&&&&copy&todir="${feature.base}/solaris.motif.sparc/${collectingFolder}"&failonerror="true"&overwrite="true"&&&&&&&&&&&&&&fileset&dir="${basedir}/bin/motif/solaris/sparc"&includes="**"&&&&&&&&&&&&/&&&&&&&&&&&&&&fileset&dir="${basedir}/bin"&includes="startup.jar"&&&&&&&&&&&&/&&&&&&&&&&/copy&&&&&&&&&&chmod&perm="755"&dir="${feature.base}/solaris.motif.sparc/${collectingFolder}"&includes="${launcherName}"&/&&&&&&&/target&&&& 4、再次尝试Export…… OK,收工了注意:该方法只适合Eclipse 3.2以上的版本,在Eclipse 3.1的版本中,相应错误的解决办法,请参考我以前写的保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
单击提交则表示您同意developerWorks
的条款和条件。 .
所有提交的信息确保安全。
developerWorks 社区:
我的概要信息
选择语言:
目前 RCP 项目的部署方式主要有两种:一种是通过 Eclipse 的向导界面,另一种是利用 Ant 脚本的方式生成一个 RCP 项目。将 Ant 与 RCP 二者的特点相结合,可以更好的提高实际项目的部署效率。本文将通过实际案例来详细介绍如何用 Ant 脚本来打包一个 RCP 项目
, 软件工程师, IBM
王庆武,目前工作于 IBM 上海系统科技开发中心(CSTL),在 IBM System Director 中担任软件工程师,对数据库、RCP 框架、设计模式等比较感兴趣。
, 软件工程师,
李玲,目前工作于 IBM China 系统和技术实验室,主要从事与 Java 相关的开发工作。热衷于大数据分析、云计算、J2EE 等技术领域的研究。
, 软件工程师, IBM
邱红艳,现为 IBM 上海系统科技开发中心(CSTL)的软件工程师,有多年的 Java 编程与管理经验,目前是 IBM System Director 升级管理的项目经理,喜欢研究云计算、项目管理、敏捷开发等技术知识。
背景介绍RCP 简介RCP(Rich Client Platform),即富客户端平台,是一个基于 Eclipse 的开源技术框架,它可以给开发人员提供丰富的组件来构建一个应用,避免了从零开始的繁重开发任务,从而能够快速的完成应用程序的开发工作,开发人员就可以通过把更多的精力放在业务组件开发上来摆脱枯燥的界面布局等开发工作。同时,RCP 也可以让从未有过插件开发的开发人员更容易上手和了解插件开发的概念。Ant 简介Ant 是用 Java 语言编写的项目管理工具。它可以通过构建 XML 的配置文件来管理和部署项目。问题的提出利用 RCP 的特点可以缩短软件开发的周期,提高开发效率,然而,在实际开发中,生成产品的编译环境和开发人员使用的开发环境往往是不在同一个服务器或者机器上。对于有可视化界面的操作系统,我们也许可以通过界面向导方式生成最终产品。但是对于那些非可视化界面的编译环境,该如何生成产品呢?与 Ant 相结合,可以很好的解决这一问题。下面进行详细介绍。环境准备准备 Ant 环境下载 Ant 安装包在 Apache 官网下载 Ant 包,相关链接在参考资料。配置环境变量在环境变量里添加 ANT_HOME=C:\Test\Ant\apache-ant-1.8.4。在 Path 里添加 %ANT_HOME%/bin 的路径。检查 Ant 安装以 Windows 为例,控制台里输入 ant -version。如果输出的是当前的 Ant 的版本并且没有报错,那说明 Ant 的环境变量配置已经好了。准备 Eclipse下载一个 Eclipse SDK 开发工具和与之对应的 Eclipse delta pack。在 delta pack 里包含了很多平台打包时所依赖的 jar 包。具体链接可以参照参考资料里的链接。实际案例通过上述的介绍,大家对 RCP 和 Ant 有了一个初步的了解。下文将通过一个例子来说明如何用 Ant 脚本来部署一个 RCP 项目。创建 RCP 项目步骤一:建立一个 RCP 的简单工程项目。选择 plug-in Project 工程。图 1. 创建插件工程命名工程名字为 HelloRCP,然后进入下一步,在选择模板的向导页里选择,“Hello RCP”模板如图所示:图 2 创建工程模板这个模板包含了一个标准的 RCP 工程所需要的包。项目创建好后,创建一个 product 文件,该文件用于定义生成产品所包含的依赖包、产品的信息等。图 3. 项目文件结构项目建立好后,下一步我们就可以开始编写 Ant 的 build 脚本了。自定义 Ant 脚本在 Ant 脚本的编写时,涉及到两个文件,一个是 build.xml,在这里用来定义对项目部署的整个流程。另一个是 build.properties,这个文件主要用来定义 build.xml 文件里用到的变量值。构建 Ant 脚本,可以通过图的形式来描述它们彼此之间的依赖关系。图 4. Target 关系图从图中可以看出,各个 Target 间的依赖关系,可以更有利于理解和编写 Ant 脚本。build.xml 文件的内容如下 :清单 1.build.xml &project name="HelloRCP" default="start"&
&property file="build.properties" /&
&!-- bootstrap --&
&target name="start"&
&antcall target="external" /&
&antcall target="deploy" /&
&!-- invocation external build.xml --&
&target name="external"&
&ant antfile="build.xml" dir="${external_build}"/&
&!-- start export rcp product --&
&target name="init"&
&mkdir dir="${buildDirectory}" /&
&mkdir dir="${buildDirectory}/plugins" /&
&copy todir="${buildDirectory}/plugins"&
&fileset dir="../../"&
&!-- include source codes needed to be built.--&
&include name="HelloRCP/**" /&
&/fileset&
&target name="pde-build"&
&java classname="org.eclipse.equinox.launcher.Main"
fork="true" failonerror="true"&
&arg value="-application" /&
&arg value="org.eclipse.ant.core.antRunner" /&
&arg value="-buildfile" /&
&arg value="${eclipseLocation}/plugins/
org.eclipse.pde.build_${pdeBuildPluginVersion}/
scripts/productBuild/productBuild.xml" /&
&arg value="-Dtimestamp=${timestamp}" /&
&classpath&
&pathelement location="${eclipseLocation}/plugins/
org.eclipse.equinox.launcher_${equinoxLauncherPluginVersion}.jar" /&
&/classpath&
&target name="build" depends="clean, init, pde-build" /&
&!-- end rcp export product--&
&!-- merge configure file --&
&target name="deploy" depends="build"&
&!-- end merge configure file --&
&!-- clean all temp file--&
&target name="clean"&
&delete dir="${buildDirectory}" /&
&/project&那么,每个 target 在这个 Ant 脚本里具体的角色是什么呢?&target name="start"&:是整个 Ant 脚本的启动 target,类似于一个类里的 main 方法。&target name="deploy"&:对项目配置文件的部署,比如需要的外部 jar、properties 文件等。&target name="build"&:对代码进行编译,并生成 RCP 的产品文件,包括执行文件,配置文件、相关的插件和产品的信息文件。&target name="pre-build"&:调用 Eclipse 的导出功能生成产品。&target name="clean"&:清除在编译过程中产生的临时文件。&target name="init"&:部署代码到指定位置,为编译做准备。&target name="external"&:用来调用其他 Ant 脚本。下面对 build.xml 做一个简单的说明:在一个 Ant 脚本里只包含一个 project 元素,并且 default 属性值定义的就是 Ant 脚本初始调用的 target,如 &project name="HelloRCP" default="start"&,在这里 start target 被定义为初始被执行的 target。对于 target 的调用这里用到了两种方法,一种是通过 depends 属性,来找到当前 target 所依赖的 target。比如 &target name="deploy" depends="build"&在 deploy 这个 target 里,设置了 depends 这个属性,所以在这里会先去调用 build 这个 target,当 build target 执行完,再来执行 deploy target。depends 属性还可以指定多个 target,比如,&target name="build" depends="clean, init, pde-build" /&在对 Ant 的 build.xml 脚本解析的时候会按顺序依次的调用这三个 target。另一种是通过 antcall 这个元素来调用 target,如 &antcall target=" external " /&,直接通过 target 的名字来调用指定的 target。在这里调用到了 external target。在实际工作中,可能某个工程已经有了自己的 Ant 脚本,而我们所需要做的就是调用这个脚本,如 external target 就是定义了一个外部脚本的调用,&ant antfile="ex_build.xml" dir="${external_app_destdir}"/&这个 external_app_destdir 名字就是用来定义另一个 Ant 脚本的具体位置,所以在框架解析到这个 target 的时候,会到指定的目录里去找名字为 ex_build.xml 的 Ant 脚本,这里要提醒的是,在 build.xml 定义的变量是可以被外部的编译脚本使用,但如果变量定义的值涉及到相对路径的时候,在对外部脚本解析的时候,框架会将这个 ex_build.xml 作为当前的编译目录,所以在 ex_build.xml 使用 build.xml 中定义的相对路径的时候,很容易产生路径文件找不到的编译错误,在编写脚本相对路径的时候,要明确这个相对路径是相对当前哪个 Ant 脚本来定义的。清单 2.init target &target name="init"&
&mkdir dir="${buildDirectory}" /&
&mkdir dir="${buildDirectory}/plugins" /&
&copy todir="${buildDirectory}/plugins"&
&fileset dir="../../"&
&include name="HelloRCP/**" /&
&!-- include source codes needed to be built.--&
&/fileset&
&/target&在 init target 里,首先是创建了 build 的路径,然后将源代码拷贝到 plugins 里,之所以构建这个目录结构,是因为要满足在 Eclipse 的 PDE 框架里的目录结构,框架会从这个目录里取得源代码,然后进行相应的编译操作。这里的相对路径的写法是以当前的 build.xml 的路径为基准的。** 表示的是指定 HelloRCP 这个目录下的所有文件及子文件夹。当然如果有多个工程需要进行编译操作在 fileset 这个元素下 , 可以指定多个 include 元素。清单 3 pde-build target &target name="pde-build"&
&java classname="org.eclipse.equinox.launcher.Main" fork="true" failonerror="true"&
&arg value="-application" /&
&arg value="org.eclipse.ant.core.antRunner" /&
&arg value="-buildfile" /&
&arg value="${eclipseLocation}/
plugins/org.eclipse.pde.build_${pdeBuildPluginVersion}
/scripts/productBuild/productBuild.xml" /&
&arg value="-Dtimestamp=${timestamp}" /&
&classpath&
&pathelement location="${eclipseLocation}/plugins
/org.eclipse.equinox.launcher_
${equinoxLauncherPluginVersion}.jar" /&
&/classpath&
&/target&这部分是将工程编译产品的核心。首先,是运行 org.eclipse.equinox.launcher.Main 这个类,在这里要传入的几个参数,例如调用的具体的 antRunner、pde 的 jar 包等等。org.eclipse.ant.core.antRunner 用来解析运行 Ant 编译脚本的文件,里面提供了一些方法来设置那些在 build 过程中用的类,productBuild.xml 就是指在当前使用的 Eclipse 里 pde 要用到的生成产品的编译文件,具体位置就是 org.eclipse.pde.build 加上具体相应的版本号的文件夹的位置里。在 productBuild.xml 的脚本里,可以看出在生成产品的时候会对相应的依赖的 jar 包进行依赖性的检查和生成,在这里很容易出现在编译的时候对某个 jar 文件的丢失,导致 Ant 脚本生成时候的报错。如果有类似缺失依赖包的问题出现,就去工程里的 .product 的 dependencies 里导入相应的 jar 包。到此,对一个 build.xml 的简单介绍就完成了,对于 Ant 脚本来说,能够完成的任务是非常丰富的,如并发,条件执行,编译,取得系统的环境变量等等,有兴趣的话可以参考 developer works 里对 Ant 的专题介绍。Ant 脚本的配置文件在 Ant 脚本里有两种主要有两种方式,一种是通过对 property 元素直接赋值,另一种是通过 build.properties 文件来定义变量的值,这种方式更有利于维护和可读性。本案例就是使用配置文件的方式来定义变量。build.xml 要先对配置文件进行导入,才会在 Ant 脚本里识别出变量的值。在默认情况下,build 的 xml 文件和配置文件在同一路径下,也可以去指定这个配置文件的具体位置。下面是 build.properties 文件的具体内容:清单 4 build.propertiespdeBuildPluginVersion=3.8.0.v5
equinoxLauncherPluginVersion=1.3.0.v3
eclipseLocation=C:/eclipse-rcp-juno-win32-x86_64/eclipse
product=HelloRCP/hellorcp.product
runPackager=true
archivePrefix=HelloRCP
collectingFolder=${archivePrefix}
configs=win32, win32, x86_64
allowBinaryCycles = true
flattenDependencies = true
buildDirectory=C:/DW
buildId=hellorcp
buildLabel=${buildType}.${buildId}
timestamp=007
baseLocation=C:/eclipse-rcp-juno-win32-x86_64/eclipse
baseos=win32
basews=win32
basearch=x86_64
filteredDependencyCheck=false
resolution.devMode=false
skipBase=true
skipMaps=true
mapsRepo=:pserver:/path/to/repo
mapsRoot=path/to/maps
mapsCheckoutTag=HEAD
mapsTagTag=v${buildId}
skipFetch=true
JavaSE-1.6=${java.home}/lib/rt.jar
logExtension=.log
javacDebugInfo=true
javacFailOnError=true
javacVerbose=true
javacSource=1.6
javacTarget=1.6
external_build=C:/external下面对 build 的配置文件做个简单的说明: pdeBuildPluginVersion=3.8.0.v5用来指定 Eclipse 里 pde 的版本,这个可以在 Eclipse 的 plugin 文件夹下找到。 equinoxLauncherPluginVersion=1.3.0.v3指定 org.eclipse.equinox.launcher 的版本,同样也是在在 Eclipse 的 plugin 文件夹下。 eclipseLocation=C:/eclipse-rcp-juno-win32-x86_64/eclipse这个变量是用来设置运行的 Eclipse 的具体文件路径。 buildDirectory=C:/DW用来设置编译生成产品的具体位置。 configs=win32, win32, x86_64用来设置生成产品的具体运行在什么样的操作系统上。这里指定的是 windows 64 位的。 buildId=hellorcp导出产品的具体名称,要区分的是这个不是具体执行文件的名字而是生成产品文件夹的名字。到此一个 RCP 项目的建立,一个标准的 Ant 脚本和配置文件的编写就完成了。运行对于编写好的 Ant 脚本有两种方式可以运行,一种是通过 Eclipse 的图形界面 ( 右键工程里的 build.xml -& Run As -& Ant Build),在 Eclipse 的控制台会打印出运行 Ant 脚本时的一些输出信息。另一种方式就是通过命令的方式在一个搭建好 Ant 环境的平台上运行如:ant
&build.xml& 这样的命令来执行 Ant 脚本。第二种方式比较方便,因为我们可以直接以命令行的方式去打包我们要的产品,而不需要通过运行 Eclipse 来完成我们的操作,而且如果是通过远程机器来打包我们的产品时,我们也只需要传递一条命令,就可以完成部署工作了。我们通过命令方式来运行之前我们写好的 Ant 脚本文件。运行如下的命令: C:\workspace_rcp\HelloRCP\builds& ant可以在控制台里看到 Ant 的编译信息,直到编译成功结束。现在我们可以看到已经部署好了我们要的产品。在 pde 的框架里,会对这个产品输出自动打成一个压缩包,根据具体项目需要我们可以编写脚本将我们需要的配置文件也放到这个压缩包里。如果有的开发人员觉得这个运行命令的方式不是很方便的话我们也可以写一个批处理文件,以 windows 为例,下面我们来写一个 .bat 文件,内容如下:清单 4 Auto.bat call C:\Test\Ant\apache-ant-1.8.4\bin\ant.bat -file
C:\workspace_rcp\HelloRCP\builds\build.xml这样以后如果有代码的更新时,我们只要运行这个 bat 文件就可以了。我们可以看到,通过命令方式运行的结果与 Eclipse 界面方式的导出是一样的,并且这种方式也节省在项目部署时候的时间,提高了效率。常见问题
用 product 运行时报找不到 application id 的错误怎么办 ?
答:打开 product 这个文件,在 overview 里的 product definition 标签中配置 product 和 application。
找不到 tools.jar 怎么办 ?
答:有的时候在配置 Ant 时,会遇到 tools.jar 找不到,最直接的方式就是把 jdk 里的这个 jar 赋值到错误提示里的 jre 的目录里。
找不到依赖包怎么办 ?
答:如果在运行 Ant 脚本的时候,提示有 jar 包缺失,在 product 的 dependencies 里添加缺少的依赖包。
如何生成多平台的产品 ?
答:如果要生成多平台的产品时,只需要修改 build.properties 里的 configs 属性的值,如:configs= win32,win32,x86 & linux, gtk, x86_64 这样就会生成 Windows 32 位和 Linux 64 位的产品。总结本文已经将 Eclipse RCP 与 Ant 工具的结合使用介绍给大家了,在实际的项目操作中,我们不但可以利用 Eclipse RCP 的特点可以提高我们的开发速度,同时在结合了 Ant 之后,也提高了项目后期效率。希望本文的介绍可以给读者在实际的开发中提供一定的帮助。
参考 :提供了 Eclipse 更多帮助文档,如 PDE 的技术介绍等。
参考 :通过此链接可以下载 Eclipse RCP 不同版本的开发工具,同时也有各个版本对应的 delta pack 包。
参考 :可以下载到最新的 Ant 工具,同时,也有工具的使用说明。
:这里有数百篇关于 Java 编程各个方面的文章。
加入 。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
IBM PureSystems(TM) 系列解决方案是一个专家集成系统
通过学习路线图系统掌握软件开发技能
软件下载、试用版及云计算
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Java technologyArticleID=854472ArticleTitle=浅析 Ant 脚本部署 RCP 项目publish-date=}

我要回帖

更多关于 硬盘干什么用的 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信