ant学习3

通常我们打包Product的时候,一般都是通过Product的export操作来进行的,但这样的做法,则限制了ContinousIntegration的自动化执行,那么,应该如何编写自动化构建脚本呢?

一、首先,让我们看一下Eclipse官方的解决方案:

http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tasks/pde_product_build.htm

从文中我们可以看出,PDE已经为从product文件构建RCP应用做好了一切准备,我们所需要做的,就是搭建目录结构以及构建脚本。但是如果完全按照官方方案去做的话,只会使得构建更加复杂,更加不可自动化,那么,让我们跟随一个简单的例子来看一下如何完成自动构建吧(在下使用的是Eclipse3.2,pde的版本号为3.2.0.v20060603,使用其他版本的朋友请自行修改):

1。使用HelloRCP模版构建一个RCP工程。命名为hellorcp,创建到G:\eclipse\workspace\hellorcp

在这一步,有一个很关键的问题需要注意,我们先来看一下上文中builddirectory的结构:

buildDirectory/

plugins/

pluginToBuildA

pluginToBuildB

myProduct.product

...

features/

featureToBuild

要想成功build工程的话,那么工程就必须要放到/plugins/的目录结构下,不然pde是找不到工程的pluginid的!我努力了很长时间才无奈的认可了这个事实。

如果我们不想把工程放到一个很复杂的目录结构下,或者对于既有的工程不想做这样的改动,那么就只好用到ant来拷贝了。我的做法是,在工程目录下,创建名为dist\plugins\hellorcp的目录,待一切就绪后,使用ant来把整个工程拷贝到这个目录下。

2。准备脚本

在工程下,新建buildConfiguration目录,并把\plugins\org.eclipse.pde.build_3.2.0.v20060603\templates\headless-build下的build.properties文件拷贝到此目录下,并修改如下设置项:

1).product——官方的说法是:thelocationofyourproductconfigurationfileintheform"//path/to/.product",而我们的buildConfiguration目录和product文件同处于一个目录下,所以只需要写上product文件的名字即可,如hellorcp.product。

2).baseLocation——官方的说法是:thelocationofaneclipseinstallcontainingallthepre-builtfeaturesandplug-insthatyourproductrequiresinfeatures/andplugins/subdirectories.TheRCPdeltapack(itisavailablefromtheeclipsedownloadpage)ismandatoryasitincludestheorg.eclipse.platform.launchersfeaturewhichcontainsthelaunchersandrootfilesnecessaryforaproduct.我们要做的就是把RCPdeltapack安装到Eclipse目录下,然后把baselocation指向Eclipse根目录即可,这里需要绝对路径。

3).buildDirectory——官方的说法是:thedirectorythebuildwilltakeplacein.Setthistothefullpathofthebuilddirectorycreatedpreviously.这里因为最后的目录指向是ant拷贝完成以后的路径,所以应当是G:\eclipse\workspace\hellorcp\dist

4).configs——listtheconfigurationsforwhichyouwantyourproducttobebuilt.Youcanuncommenttheconfiguration(s)provided(becarefulofthelinecontinuations).

5).archivePrefix——thenameofthedirectoryofyourproductonceinstalledondisk.如hellorcp

以上为官方给出的配置项,而我们如果使用了1.5或1.6中的新功能的话,还需要到文件的最底部,找到javacSource和javacTarget两个选项,进行对应的修改。

3。ant脚本

在工程目录下新建一个ant脚本,把下面的代码粘贴进去,运行,就可以到dist/I.TestBuild下面找构建后的产品了。

xmlversion="1.0"?>

<projectname="project"default="rcpAutomatedBuild">

<propertyname="eclipse.install"value="G:\eclipse">

property>

<propertyname="project.dir"value="G:\eclipse\workspace\hellorcp">

property>

<propertyname="dist.dir"value="${project.dir}\dist\plugins\hellorcp"/>

<targetname="prepare">

<mkdirdir="${dist.dir}"/>

<copytodir="${dist.dir}">

<filesetdir="${project.dir}">

fileset>

copy>

target>

<targetname="rcpAutomatedBuild"depends="prepare">

<javaclassname="org.eclipse.core.launcher.Main"fork="true"failonerror="true">

<argvalue="-application"/>

<argvalue="org.eclipse.ant.core.antRunner"/>

<argvalue="-buildfile"/>

<argvalue="${eclipse.install}\plugins\org.eclipse.pde.build_3.2.0.v20060603\scripts\productBuild\productBuild.xml"/>

<argvalue="-Dbuilder=${dist.dir}\buildConfiguration"/>

<classpath>

<pathelementlocation="${eclipse.install}\startup.jar"/>

classpath>

java>

target>

project>

构建后的产品是以zip形式存在的,我们还可以根据实际的需要,对build.properties进行更多的修改。

上面的脚本还有一些缺陷,比如绝对位置的使用,但这是无法避免的了.......

二、接下来是使用Maven的构建:

使用Maven的准备工作包括下载,配置环境变量,安装MavenpluginforEclipse,并在Preferences中,Java/BuildPath/ClasspathVariables/下面配置M2_REPO变量,使其指向userhome\.m2\repository

关于Maven的入门知识在此略过,请自行阅读Maven官方站点的相关资料。

在创建工程时,请将src目录指向src/main/java,output目录指向target/classes

工程创建完毕后,右击工程名,在弹出菜单中选中“Maven2“,然后选择”Enable“,则会生成对应的pom文件,我们可以自己设置对应的groupid,artifactId,以及相应的dependencies,在这里,我们只需要为Eclipse插件依赖以外的第三方包设置dependency就可以了。如果该包在官网上无法访问到,则可以通过运行

mvninstall:install-file-Dfile=path-to-your-artifact-jar\

-DgroupId=your.groupId\

-DartifactId=your-artifactId\

-Dversion=version\

-Dpackaging=jar\

-DgeneratePom=true

来把第三方包安装到localrepository里面去。

然而,在pluginproject运行时,除了Eclipse插件依赖以外的第三方包是需要位于plugin目录下的,否则在运行时无法找到对应路径,我们也可以看到,在plugin.xml视图的runtime页面中,根本无法把plugin目录以外的jar文件加入到classpath中来。所以,我们还需要另外的ant脚本来完成拷贝工作。脚本如下所示:(此处参考了江南白衣,有一点不同的是,此处把ant的classpath指向了localrepository,这样发布的时候,就无需发布maven-artifact-ant.jar了)

xmlversion="1.0"encoding="UTF-8"?>

<projectname="build-base"default="copy"xmlns:artifact="urn:maven-artifact-ant">

<typedefresource="org/apache/maven/artifact/ant/antlib.xml"uri="urn:maven-artifact-ant">

<classpath>

<pathelementlocation="${user.home}/.m2/repository/org/apache/maven/maven-artifact-ant/2.0.4/maven-artifact-ant-2.0.4.jar"/>

classpath>

typedef>

<artifact:pomid="maven.project"file="pom.xml"/>

<artifact:dependenciesfilesetid="dependency.fileset"useScope="runtime">

<pomrefid="maven.project"/>

artifact:dependencies>

<targetname="copy">

<copytodir="lib">

<filesetrefid="dependency.fileset"/>

<mappertype="flatten"/>

copy>

target>

project>

接下来的目录结构及脚本的准备工作和前面一样,除了两处需要修改:

1)buildConfiguration\build.properties,这里的buildDirectory可以注释掉。

2)第3步中的ant脚本,因为我们这里需要用maven来构建,所以只需要执行prepare任务就可以了。

再有就是pom.xml文件中,要加入构建的任务:

<build>

<plugins>

<plugin>

<groupId>org.codehaus.mojogroupId>

<artifactId>pde-maven-pluginartifactId>

<extensions>trueextensions>

<configuration>

<eclipseInstall>G:\eclipseeclipseInstall>

<pdeProductFilename>hellorcp.productpdeProductFilename>

<pdeBuildVersion>3.2.0.v20060603pdeBuildVersion>

configuration>

plugin>

plugins>

build>

最后运行第3步中的ant脚本,然后到dist\plugins\hellorcp目录下,运行mvninstall就可以了。构建后的文件可以在localrepository中找到。

常见错误:

使用antbuild的时候,出现plugin:xxx找不到的错误,请检查buidConfiguration\build.properties中buildDirectory的配置项

使用Mavenbuild的时候,出现编译错误,请检查pom.xml中是否少了

<packaging>zip</packaging>

ant

相关推荐