欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 网站制作教程 >

关于Eclipse 3.0的插件主动构建简介

发表于2019-04-23 23:05| 次阅读| 来源网络整理| 作者session

摘要:关于Eclipse 3.0的插件主动构建简介
关于Eclipse 3.0的插件主动构建简介

  1.根本信息

  摘要:

  Eclipse 提供了在Eclipse IDE外主动构建的才能。Eclipse自身也是采用这种模式构建的。本文将分享Eclipse主动构建的一些阅历,具体引见Eclipse插件开发的主动编译过程。

  环境要求:本文是基于Eclipse 3.0环境停止形容的。假设你利用的是其余版本的Eclipse,在实验时你能够需求对一脚本停止修正。

  2.Ant引见

  Ant是一个平台有关的Java名目构建工具。利用Ant可能方便的将您开发的名目标构建流程有效的治理起来,可能方便的提供给用户可发布的软件产品。利用Ant来做名目构建工具的优点被越来越多的人认可,目前开源的Java名目几乎都利用Ant做构建工具。如今还出现了Dot Net平台上的Ant构建工具。Ant已经成为了Java名目构建的理想上的标准。

  Ant经过执行构建脚原本生成可发布的软件包。构建脚本为XML格式。每一个Ant脚本中蕴含一个Project, Project下又蕴含许多的Target, Target由一个或多个Ant Task组成。Ant的Task容许用户本人停止扩充,当Ant提供的Task不能满足你的需求时可能本人开发一个Task。一个Ant脚本可能调用另外一个Ant脚本,所以可能设计出精美的脚本回调构造, 使您开发的Ant脚本更易于维护和扩充。

  Eclipse将Ant集成到了它的IDE中,开发完一个插件名目,你可能方便的生成插件名目标构建脚本。然而Eclipse的插件名目普通比较依赖Eclipse的开发环境,假设间接利用Ant来执行Eclipse生成的构建脚本则需求做许多额外的环境设置的工作。Eclipse的开发者思考到了这一点,在Eclipse中提供了一个Ant的Eclipse Application。你可能利用命令行的模式执行它,像下边这样:

  3 Eclipse插件主动构件过程

  3.1预备工作

  1.片面剖析你需求构建的名目

  在编写Ant脚本前,需求对将要构建的名目有一个片面的思考。 列出你的名目有多少个子名目需求停止构建。各个子名目之间的依赖关系如何,这关系到在脚本中对各个子名目标构建先后顺序的安排。其次,列出名目标中间提交物清单。也就是构建的后果是什么。对于一个小名目构建的后果兴许就是一个jar文件,然而对于一个几十人的开发团队开发的名目,构建后果能够蕴含有服务端的构建后果,客户端的构建后果,还有Web程序。中间提交物清单应该包括构建后果的文件名和寄存门路以及将来部署时在未来系统中所处的逻辑地位。

  2.列出构建的工作流程

  也就是说在你的构建过程中先做什么,后做什么。例如通常的构建过程是:从cvs服务器获取最新版本的代码,然后对代码停止编译,之后打包部署。这个过程假设一下子想不清楚,可能先列出最顶层的过程,然后始终细化。

  3.了解构建的依赖环境

  普通名目都是在IDE中开发,名目标配置信息都经过IDE的设置界面停止设置。这些设置项比较扩散。假设要在利用Ant胜利构建名目,则需求对IDE中的设置导出,否则构建通常会失败。另外需求了解名目利用了那些第三方的开发包,在编写构建脚本时需求思考。Eclipse的插件名目可能方便的导出Ant构建脚本,供其余顶层脚本调用。

  3.2主动构建脚本编写

  在对你要构建的名目有了一个通盘的思考之后,可能末尾编写构建脚本了。最间接的方法当然是本人从头末尾编写构建脚本。或许是利用一个顶层脚本依照子名目标依赖关系依次调用各个插件生成的构建脚本build.xml文件。这样能为咱们节俭很大一局部工夫。然而实际证实,即使是这种模式工作量还是很大。例如咱们目前的名目标插件数目已经有几十个,依次调用一遍各个插件的build.xml文件依然是一件很累和乏味的事件。实践上咱们也是这样做的。有没有更方便的方法呢?

  原来,Eclipse自身提供了一个插件构建的脚本框架,咱们只有要像填空一样编写很少的脚本代码就可能实现整个简单的构建过程。

  3.3Eclipse主动构建框架引见

  下面咱们用一个例子来阐明整个的构建过程。咱们在下面的例子中将会编写sdk.examples的构建脚本。sdk.examples是eclipse的示例代码,你可能在eclipse的cvs里失去。

  在末尾之前你需求下载cvs.exe和unzip.exe,并将他们拷贝到系统目录中,或许放置在环境变量%PATH%可能找到的中央。Cvs.exe和unzip.exe可能从以下中央下载:

CVS client version 1.10 or higher on system path.
Info-Zip zip and unzip executables on system path.

  第一步先获得org.eclipse.releng.eclipsebuilder。org.eclipse.releng.eclipsebuilder是eclipse的发布引擎。

D:\build>cvs -d :pserver:anonymous@dev.eclipse.org:/home/eclipse export -r R3_0_2 org.eclipse.releng.eclipsebuilder

  org.eclipse.releng.eclipsebuilder中的readme.html形容了如何构建一个eclipse的组件。

  在默许的情况下,为了获取3.0.0版本的sdk.examples,咱们需求修正org.eclipse.releng.eclipsebuilder/sdk.examples/build.properties文件。

mapVersionTag=R3_0_0

  如今咱们可能在控制台的命令行中末尾构建过程。

D:\build\org.eclipse.releng.eclipsebuilder>set ECLIPSE_HOME=D:\eclipse\eclipse-3.0.0
D:\build\org.eclipse.releng.eclipsebuilder>java -cp %ECLIPSE_HOME%\startup.jar org.eclipse.core.launcher.Main
-application org.eclipse.ant.core.antRunner -buildfile build.xml
-Dcomponent=sdk.examples -Dconfigs="*,*,*" -Dbaseos=win32 -Dbasews=win32 -Dbasearch=x86 -Djavacfailonerror=true
-Dpde.build.scripts=%ECLIPSE_HOME%/plugins/org.eclipse.pde.build_3.0.0/scripts -DbaseLocation=%ECLIPSE_HOME%

  命令行中的compoent属性是你将要构建的组件称号。也就是你在d:\build\org.eclipse.releng.eclipsebuilder目录下的一个子目录的称号。在这个子目录下有build.properties和customTargets.xml文件。

  Build脚本将会利用d:\build\org.eclipse.releng.eclipsebuilder\src目录作为默许的build目录。你也可能将-DbuildDirectory=${basedir}/newDirectory退出到命令行中指定你本人的build目录。

  构建实现之后,拆卸实现的可散发的软件包和构建日志位于build目录下的一个子目录,这个子目录的名字由buildLabel属性定义。默许的这个目录的称号由”I-”末尾,并蕴含构建时辰的工夫戳。

  命令行中的baseLocation属性用户指定eclipse启动的目录。同时,构建过程中假设在build目录中找不到一个plugin,会到baseLocation目录去查找。因此,在你本人的构建过程中的第三方的插件也应该位于%baseLocation%/plugins目录下,能力保证构建过程胜利。BaseLocation目录下不能蕴含任何你将要构建的插件,假设baseLocation目录下蕴含了sdk.examples,构建过程将会出错。

  3.4构建过程剖析

  在下面的局部咱们将为你剖析构建过程中的一些细节。首先咱们先相熟一下和构建无关的几个重要文件和他们的地位:

build.xml

  位于 org.eclipse.pde.build_<version>/scripts 目录下。该文件提供了一个从prebuild到postbuild的过程的一个骨架。

genericTargets.xml
 
  位于org.eclipse.pde.build_<version>/scripts目录下。蕴含了像fetchElement, generateScript, processElement, assembleElement等Ant Task。

customTargets.xml

  位于org.eclipse.releng.eclipsebuilder目录的子目录下。如sdk.examples.customTargets.xml文件将会被org.eclipse.releng.eclipsebuilder目录下的build.xml文件调用。在customTargets.xml文件中将会调用genericTargets.xml文件中的target。CustomTargets.xml文件的次要职责是定义将要构建的features和从那里失去构建过程中需求的map文件。关于map文件将会在后边引见。

  4. build.properties

  位于org.eclipse.releng.eclipsebuilder目录的子目录下。Build.properties属性文件中定义了一些构建过程中build脚本利用的一些属性。

  下面咱们来看一下整个构建过程的序列图如下:


  上面的序列图给出了整个构建过程的一个概览。

  1.D:\build\org.eclipse.releng.eclipsebuilder目录下的build.xml首先会设置一些与构建过程无关的环境设置变量,然后调用$ECLIPSE_HOME\plugins\org.eclipse.pde.build_3.0.0\scripts下的build.xml文件。

  2.$ECLIPSE_HOME\plugins\org.eclipse.pde.build_3.0.0\scripts下的build.xml文件会一次调用本身的preBuild,fetch,generate,process,assemble,postBuild的几个target。在这几个target中又会一次调用customTargets.xml文件。所以说build.xml是整个构建过程的骨架,它定义了构建过程中的“构建预备”,“fetch构建所需资源”,“生成插件构建所需build.xml文件”,“编译”,“组装”,“构建实现后的相干工作”等阶段。

  3.PreBuild过程中要做的一件重要事件就是回调customTargets.xml文件的getMapFiles Target获取map文件。Map文件定义了将要构建的一切插件在cvs中的地位。Map文件的格式如下:
feature|fragment|plugin@elementId=<cvs tag>,<access method>:<cvsuser>@<cvs repository>,<cvs password>[,<repository path> (no starting slash) ]
Map文件从cvs获得后会放在buildDirectory目录下的map子目录下。Map文件可能是有多个的,脚本会将map目录下的一切map文件衔接为${buildDirectory}/directory.txt文件。

  4.fetch过程异样会调用customTargets.xml文件中的allElements target。AllElements Target又将调用$ECLIPSE_HOME\plugins\org.eclipse.pde.build_3.0.0\scripts下的genericTargets.xml文件的fetchElement target。FetchElement target中会调用eclipse内置的Ant Task “eclipse.fetch”。“eclipse.fetch”会主动生成一个fetch_${plugin_id}.xml文件。它生成的原理是剖析feature.xml文件,获取一个feature内蕴含的一切插件id, 然后在map文件中查找插件在cvs中的地位并生成fetch_$(plugin_id).xml文件。然后会执行该fetch文件将插件代码获取到本地构建机器上。

  5.Generate过程异样会回调customTargets.xml文件的allElements target。AllElements target又将调用$ECLIPSE_HOME\plugins\org.eclipse.pde.build_3.0.0\scripts下的genericTargets.xml文件的generateScript target。GenerateScript Target中会调用eclipse内置的Ant Task “eclipse.buildScript”。“eclipse.buildScript”的作用是依据插件下的plugin.xml文件生成构建插件所需的build.xml文件。大家留意到在脚本中将这个过程主动化了。异样的咱们可能在ide环境中的插件开发透视图中选中一个plugin.xml文件,执行右键菜单中的pde tools->Create Ant Build File命令生成build.xml文件。如下图所示:


  然而,在开发过程中常常会减少对新的插件的引用而没有重重生成build.xml文件,这是导致构建过程失败的次要缘由。另外一个缺陷是假设利用在ide环境中生成的build.xml文件,构建环境必须和ide环境设置一样。开发环境和构建环境设置不一样也是导致构建过程失败的最常见的缘由。

  在构建时辰生成build.xml文件可能避免以上两个缺陷。

  6.Process过程异样也会回调customTargets.xml文件的allElements target。AllElements target又将调用$ECLIPSE_HOME\plugins\org.eclipse.pde.build_3.0.0\scripts下的genericTargets.xml文件的processElement Target。 ProcessElement Target调用主动生成的插件build.xml文件,实现对插件的构建。

  7.Assemble过程将实现插件的组装过程。

  8.PostBuild过程回调customTargets.xml的postBuild target。

  3.5构建你本人的插件

  后面咱们构建了sdk.examples,并且剖析了整个主动构建的全过程。采用上面引见的构建方法有一个限度就是你必须有一个feature名目。假设没有就先建设一个。菜单门路是File->New->Project...->Plug-in Development->Feature Project。在打开的导游中输入feature名目标称号,然后抉择你要构建的插件并且蕴含到feature名目中。假设你不想将你要发布的plugin部署为一个feature,你只有要修正feature名目中的build.properties文件,删除掉bin.includes属性就可能了。

  构建你本人的插件,你需求预备四个文件:

  1.a map file for fetching the sources ,map文件普通情况下是寄存在cvs中,在构建末尾时从cvs下载。

  2.customTargets.xml ,customTargets.xml文件位于位于d:\build\org.eclipse.releng.eclipsebuilder目录的子目录下。如sdk.examples。org.eclipse.releng.eclipsebuilder是eclipse的release engine。可能从eclipse的cvs中获得。

  3.build.properties ,build.properties文家定义了构建过程中利用的环境变量。你可能依据本人的情况修正。

  4.a shell script, which starts an Eclipse instance as AntRunner。运转Eclipse实例的脚本。在本文的后面已经有过引见。

  下面是一个Map文件片断的示例,你可能依据你本人的情况修正用户名,明码,package称号,和CVS分支称号。

feature@org.rubypeople.rdt=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,,org.rubypeople.rdt-feature
plugin@org.kxml2=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,
plugin@org.rubypeople.rdt=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,
plugin@org.rubypeople.rdt.core=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,


  CustomeTargets.xml提供了构建过程中回调的钩子。CustemerTargets.xml文件的模板在org.eclipse.pde.build插件的script目录下可能找到。下面是customerTargets.xml文件的一个片断。allElements target中定义了你要构建的feature id。这里的feature id不是feature manifest文件中定义的feature,而是用于在map文件中查找cvs信息时利用的id。getMapFiles target会将map文件下载到本地的${buildDirectory}目录下。Assemble target会调用生成的assemble脚本文件对编译后果停止组装。

<target>
<ant antfile="${genericTargets}" target="${target}" >
<property value="feature" />
<property value="org.rubypeople.rdt" />
</ant>
</target>
<target>
<property value=":ext:cvs.sf.net:/cvsroot/rubyeclipse" />
<cvs cvsroot="${cvsRoot}"
dest="${buildDirectory}/maps"
command="export -r ${mapVersionTag} org.rubypeople.rdt.build/map"/>
</target>
<target>
<ant antfile="${assembleScriptName}" dir="${buildDirectory}">
<property value="" />
</ant>
</target>


  论断

  回忆一下整个构建过程,在customTargets.xml文件中咱们定义了每一构建过程中供$ECLIPSE_HOME\plugins\org.eclipse.pde.build_3.0.0\scripts下的build.xml文件回调的target。对于一些简单的通用性能如生成获取cvs中插件代码的fetch.xml文件、生成build.xml文件等由genericTargets.xml来实现。这样一种构造最大限制的保证了customTargets.xml文件的繁复性、可维护性、可扩大性。Eclipse提供了这样一个优雅的构建脚本框架,用户只有要编写本人的customTargets.xml文件。CustomTargets.xml文件的模板可能在$ECLIPSE_HOME\plugins\org.eclipse.pde.build_3.0.0\scripts找到。咱们只有要拷贝一个,然后稍加修正就可能实现该项工作。

  CustomTargets.xml文件中预约义了很多和构建过程对应的target。这些target都会被$ECLIPSE_HOME\plugins\org.eclipse.pde.build_3.0.0\scripts调用。一个例子可能很好的阐明这种回调的方便性。当咱们构建一个蕴含有help文件的插件时,一个预先要做的工作就是先要将help文件打包成zip文件。咱们可能修正customTargets.xml中的preProcess Target:

<target>
<zip destfile="${buildDirectory}/plugins/org.eclipse.sdk.examples/doc.zip"
basedir="${buildDirectory}/plugins/org.eclipse.sdk.examples"
includes="doc/**"/>
</target>