Eclipse p2 automated plugin build for continious integration

Posted on March 24, 2010

Eclipse is big, so it took me a while to figure out hot to do headless build and release of eclipse plug-ins. So here is the ant script that will do that. Run it with

java -Drepo.dir=file:///usr/local/tomcat/webapps/eclipse/ -jar  /opt/eclipse-rcp-galileo-SR2/plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar  -application org.eclipse.ant.core.antRunner -v -buildfile build.xml

build.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="aseg-plugins-update-site" basedir="." default="all">
 <property name="buildDirectory" value="${basedir}/build"/>
 <property name="builder" value="${basedir}"/>
 <property name="baseLocation" value="${eclipse.home}"/>
 <property name="buildType" value="I"/>
 <property name="buildId" value="aseg"/>
 <property name="buildLabel" value="${buildType}.${buildId}"/>
 <property name="collectingFolder" value="${buildType}.${buildId}"/>

 <property name="javacVerbose" value="true"/>
 <property name="javacDebugInfo" value="true"/>
 <property name="javacFailOnError" value="true"/>
 <property name="javacSource" value="1.6"/>
 <property name="javacTarget" value="1.6"/>
 <property name="fautureName" value="SE_Advisor_Client"/>
 <property name="repoName" value="ASEG"/>
 <!-- todo: pluginPath to avoid copy to builddir -->
 <tstamp/>
 <target name="all">
 <antcall target="clean"/>
 <antcall target="resolve"/>
 <antcall target="init"/>
 <antcall target="buildScript"/>
 <antcall target="compile"/>
 <antcall target="assemble"/>
 <antcall target="package"/>
 <antcall target="updateFuture"/>
 <antcall target="addCategories"/>
 </target>
 <target name="clean">
 <delete dir="${buildDirectory}"/>
 <delete dir="${buildLabel}"/>
 </target>
 <target name="resolve">
 <ant dir="../SE-Advisor Eclipse Plug-in" antfile="resolve.xml" target="resolve"/>
 <ant dir="../SE-Advisor Eclipse Query UI" antfile="resolve.xml"  target="resolve"/>
 <ant dir="../Freemarker" antfile="resolve.xml"  target="resolve"/>
 <ant dir="../ca.concordia.cs.aseg.seadvisor" antfile="resolve.xml"  target="resolve"/>
 </target>
 <target name="init">
 <mkdir dir="${buildDirectory}" />
 <mkdir dir="${buildDirectory}/plugins" />
 <mkdir dir="${buildDirectory}/features" />
 <copy todir="${buildDirectory}/plugins" overwrite="false" verbose="false">
 <fileset dir="../">
 <exclude name="**/bin/**" />
 <include name="SE-Advisor Eclipse Plug-in/**" />
 <include name="SE-Advisor Eclipse Query UI/**" />
 <include name="ca.concordia.cs.aseg.seadvisor/**" />
 <include name="Freemarker/**" />
 </fileset>
 </copy>
 <copy todir="${buildDirectory}/features">
 <fileset dir="../">
 <include name="SE-Advisor Eclipse Feature/**" />
 </fileset>
 </copy>
 </target>

 <target name="buildScript" depends="">
 <eclipse.buildScript
 elements="feature@${fautureName}"
 buildDirectory="${buildDirectory}"
 children="true"
 recursiveGeneration="true"
 parallelcompilation="false"
 outputupdatejars="true"
 groupconfiguration="false"
 flattendependencies="true"
 generateversionslists="true"
 baselocation="${eclipse.home}"
 />
 </target>
 <target name="compile">
 <ant dir="${buildDirectory}" antfile="compile.${fautureName}.xml"/>
 <fail>
 <condition>
 <isset property="compilation.error.occured"/>
 </condition>
 </fail>
 </target>
 <target name="assemble">
 <ant dir="${buildDirectory}/" antfile="assemble.${fautureName}.xml"/>
 </target>
 <target name="package">
 <ant antfile="${buildDirectory}/package.${fautureName}.xml" />
 </target>
 <target name="updateFuture">
 <p2.publish.featuresAndBundles
 metadataRepository="${repo.dir}"
 artifactRepository="${repo.dir}"
 metadataRepositoryName="${repoName}"
 artifactRepositoryName="${repoName}"
 compress="false"
 publishArtifacts="true"
 append="true"
 source="${buildDirectory}">
 </p2.publish.featuresAndBundles>
 </target>
 <target name="addCategories">
 <java classname="org.eclipse.equinox.launcher.Main">
 <arg value="-application"/>
 <arg value="org.eclipse.equinox.p2.publisher.CategoryPublisher"/>
 <arg value="-metadataRepository"/>
 <arg value="${repo.dir}"/>
 <arg value="-categoryDefinition"/>
 <arg value="../SE-Advisor Eclipse Update Site/category.xml"/>
 </java>
 </target>
</project>

Filed Under Uncategorized | Leave a Comment

© Copyright 0xDEADBEEFCAFE • Powered by Wordpress • Design by Sebastin.

free web hit counter