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