In my project I use PDE/Build to build my RCP application on a remote server in Hudson.
The current version is a package based on Eclipse Galileo and it works fine both as a builder application and as a target platform.
Now I want to upgrade it to Indigo and I need some help here.
First, the old method of unpacking number of zips to form a target platform does not work.
(I used Platform Runtime Binary, Delta pack, PDE Runtime Binary and JDT Runtime Binary - a set that I came up with that can be used both as a builder and as a target platform).
Ok, there is new target definition for that.
How would I configure it so that it corresponds to my Galileo set up?
(And of course I wouldn't mind if it was simpler/cleaner).
I tried the following:
- Added Eclipse RCP, Eclipse RCP Plug-in Developer Resources (for source), PDE/API Tools Environment from download.eclipse.org/eclipse/updates/3.7
- Added Eclipse Java Development from download.eclipse.org/releases/indigo
- Downloaded delta pack manually from download.eclipse.org/eclipse/downloads/drops/R-3.7-201106131736/download.php?dropFile=eclipse-3.7-delta-pack.zip, unpacked it and added the resulting directory (as Directory) to target definition. By the way, is there an update site for Indigo delta pack?
- Added a couple of third party plug-ins from Eclipse Orbit p2 site: download.eclipse.org/tools/orbit/downloads/drops/R20110523182458/repository
I then used the definition's 'Set as Target Platform' - and my project builds fine in my workspace - that's nice!
Then I exported the platform to .
Now, if I try to execute my build like this:
java -jar <target-platform>\plugins\org.eclipse.equinox.launcher_1.2.0.v20110502.jar -application org.eclipse.ant.core.antRunner -buildfile <target-platform>/plugins/org.eclipse.pde.build_3.7.0.v20110512-1320/scripts/productBuild/productBuild.xml -Dbuilder=<pdebuild-folder>
or even
java -jar <target-platform>\plugins\org.eclipse.equinox.launcher_1.2.0.v20110502.jar
I get the following error:
An error has occurred. See the log file \configuration\1316517334675.log
The log contains the following:
!SESSION 2011-09-20 15:15:34.269
eclipse.buildId=unknown
java.version=1.7.0
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
!ENTRY org.eclipse.osgi 4 0 2011-09-20 15:15:35.175
!MESSAGE Application error
!STACK 1
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Ended up with Maven based build against "Eclipse for RCP and RAP Developers" plus delta pack plus SWTBot.
Both were deployed to my Maven repository and are unpacked during the build (if required). Therefore, I no longer care about the size of the target platform.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<!-- Deploy target platform if required -->
<execution>
<id>unpack-target-platform</id>
<phase>initialize</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<markersDirectory>${target.platform.dir}</markersDirectory>
<artifactItems>
<artifactItem>
<groupId>org.eclipse</groupId>
<artifactId>rcp-target-platform</artifactId>
<version>3.7.2-win32-x86_64</version>
<type>zip</type>
<outputDirectory>${target.platform.dir.sdk}</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.eclipse</groupId>
<artifactId>rcp-target-platform-delta-pack</artifactId>
<version>3.7.2</version>
<type>zip</type>
<outputDirectory>${target.platform.dir.deltapack}</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.eclipse</groupId>
<artifactId>swtbot.eclipse</artifactId>
<version>2.0.5.20111003_1754-3676ac8-dev-e36</version>
<type>zip</type>
<outputDirectory>${target.platform.dir.swtbot}</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<!-- Build system properties -->
<target.platform.dir>/rcp-target-platform-3.7.2</target.platform.dir>
<target.platform.dir.swtbot>${target.platform.dir}/swtbot</target.platform.dir.swtbot>
<target.platform.dir.swtbot.plugins>${target.platform.dir.swtbot}/eclipse/plugins</target.platform.dir.swtbot.plugins>
<target.platform.dir.sdk>${target.platform.dir}/sdk</target.platform.dir.sdk>
<target.platform.dir.sdk.plugins>${target.platform.dir.sdk}/eclipse/plugins</target.platform.dir.sdk.plugins>
<target.platform.dir.deltapack>${target.platform.dir}/deltapack</target.platform.dir.deltapack>
<target.platform.dir.deltapack.plugins>${target.platform.dir.deltapack}/eclipse/plugins</target.platform.dir.deltapack.plugins>
<pdebuild.launcherVersion>1.2.0.v20110502</pdebuild.launcherVersion>
<pdebuild.plugin.version>3.7.0.v20111116-2009</pdebuild.plugin.version>
<pdebuild.antDelegateBuildfile>${pdebuild.configDirectory}/pdebuild-ant-from-mvn.xml</pdebuild.antDelegateBuildfile>
<pdebuild.configDirectory>${basedir}/pdebuild</pdebuild.configDirectory>
<pdebuild.buildDirectory>${project.build.directory}/${pdebuild.directory}</pdebuild.buildDirectory>
<pdebuild.directory>pde-build</pdebuild.directory>
</properties>
I then call ant build from Maven like this:
<!-- Delegate execution to PDE/Build via ant -->
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>compile</phase>
<configuration>
<target>
<ant antfile="${pdebuild.antDelegateBuildfile}">
<property name="equinoxLauncherPluginVersion" value="${pdebuild.launcherVersion}" />
<property name="pdeBuildPluginVersion" value="${pdebuild.plugin.version}" />
<property name="projectsDirectory" value="${basedir}" />
<property name="baseLocation" value="${target.platform.dir}" />
<property name="buildDirectory" value="${pdebuild.buildDirectory}" />
<property name="builder" value="${pdebuild.configDirectory}" />
<property name="product" value="${gui.product}"/>
<property name="runPackager" value="${pdebuild.runPackager}"/>
</ant>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
I am happy with the set up now.