Creating an RCP Application for Windows on a Unix Machine

We are trying to create an Eclipse PDE assembly for an RCP application through Hudson / Jenkins. We have done this so far on a Windows machine (Hudson runs on Windows Server 2003). We decided to port our CI system to a unix machine. When executing the same assembly on a unix machine, our assembly fails with the following error:

  ! SESSION 2011-04-12 01: 00: 49.497 -------------------------------------- ---------
 eclipse.buildId = unknown
 java.version = 1.6.0_23
 java.vendor = Sun Microsystems Inc.
 BootLoader constants: OS = win32, ARCH = sparc, WS = win32, NL = en_US
 Framework arguments: -application org.eclipse.ant.core.antRunner -buildfile /appl/midw/jenkins/jobs/AP_NAPF/workspace/TP/plugins/org.eclipse.pde.build_3.4.1.R34x_v20081217/scripts/build.xml main -Ddummy = true
 Command-line arguments: -ws win32 -os win32 -application org.eclipse.ant.core.antRunner -buildfile /appl/midw/jenkins/jobs/AP_NAPF/workspace/TP/plugins/org.eclipse.pde.build_3.4.1 .R34x_v20081217 / scripts / build.xml main -data / appl / midw / jenkins / jobs / AP_NAPF / workspace / ap_build / workspace -Ddummy = true

 ! ENTRY org.eclipse.osgi 4 0 2011-04-12 01: 00: 58.961
 ! MESSAGE An error occurred while automatically activating bundle org.eclipse.ui.workbench (687).
 ! STACK 0
 org.osgi.framework.BundleException: The activator org.eclipse.ui.internal.WorkbenchPlugin for bundle org.eclipse.ui.workbench is invalid
     at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator (AbstractBundle.java:146)
     at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start (BundleContextImpl.java:980)
     at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker (BundleHost.javahaps46)
     at org.eclipse.osgi.framework.internal.core.AbstractBundle.start (AbstractBundle.java:265)
     at org.eclipse.osgi.framework.util.SecureAction.start (SecureAction.java:400)
     at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass (EclipseLazyStarter.java:111)
     at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass (ClasspathManager.java:427)
     at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass (DefaultClassLoader.java:193)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass (BundleLoader.java data70)
     at org.eclipse.osgi.framework.internal.core.SingleSourcePackage.loadClass (SingleSourcePackage.java:33)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal (BundleLoader.java:443)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.javahaps99)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.javahaps87)
     at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass (DefaultClassLoader.java:87)
     at java.lang.ClassLoader.loadClass (ClassLoader.java:248)
     at java.lang.ClassLoader.defineClass1 (Native Method)
     at java.lang.ClassLoader.defineClassCond (ClassLoader.java:632)
     at java.lang.ClassLoader.defineClass (ClassLoader.java:616)
     at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass (DefaultClassLoader.java:165)
     at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass (ClasspathManager.java∗54)
     at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl (ClasspathManager.java∗24)
     at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl (ClasspathManager.java:455)
     at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader (ClasspathManager.java:443)
     at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass (ClasspathManager.java:423)
     at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass (DefaultClassLoader.java:193)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass (BundleLoader.java data70)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal (BundleLoader.java:446)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.javahaps99)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.javahaps87)
     at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass (DefaultClassLoader.java:87)
     at java.lang.ClassLoader.loadClass (ClassLoader.java:248)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass (BundleLoader.java data15)
     at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass (BundleHost.java:227)
     at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator (AbstractBundle.java:139)
     at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start (BundleContextImpl.java:980)
     at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker (BundleHost.javahaps46)
     at org.eclipse.osgi.framework.internal.core.AbstractBundle.start (AbstractBundle.java:265)
     at org.eclipse.osgi.framework.util.SecureAction.start (SecureAction.java:400)
     at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass (BundleHost.java:234)
     at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass (AbstractBundle.java:1274)
     at org.eclipse.ant.core.AntCorePreferences $ WrappedClassLoader.findClass (AntCorePreferences.java:115)
     at java.lang.ClassLoader.loadClass (ClassLoader.java:307)
     at java.lang.ClassLoader.loadClass (ClassLoader.java:248)
     at org.eclipse.ant.internal.core.AntClassLoader.loadClassPlugins (AntClassLoader.java:69)
     at org.eclipse.ant.internal.core.AntClassLoader.findClass (AntClassLoader.java:47)
     at java.lang.ClassLoader.loadClass (ClassLoader.java:307)
     at java.lang.ClassLoader.loadClass (ClassLoader.java:248)
     at org.eclipse.ant.core.AntRunner.run (AntRunner.java∗10)
     at org.eclipse.ant.core.AntRunner.start (AntRunner.java:600)
     at org.eclipse.equinox.internal.app.EclipseAppHandle.run (EclipseAppHandle.java:193)
     at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication (EclipseAppLauncher.java:110)
     at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start (EclipseAppLauncher.java:79)
     at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.javahaps86)
     at org.eclipse.core.runtime.adaptor.EclipseStarter.run (EclipseStarter.java:179)
     at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke (Method.java∗97)
     at org.eclipse.equinox.launcher.Main.invokeFramework (Main.java∗49)
     at org.eclipse.equinox.launcher.Main.basicRun (Main.java:504)
     at org.eclipse.equinox.launcher.Main.run (Main.java:1236)
     at org.eclipse.equinox.launcher.Main.main (Main.java:1212)
 Caused by: java.lang.NoClassDefFoundError: org / eclipse / swt / SWTError
     at java.lang.Class.getDeclaredConstructors0 (Native Method)
     at java.lang.Class.privateGetDeclaredConstructors (Class.java:2389)
     at java.lang.Class.getConstructor0 (Class.java:2699)
     at java.lang.Class.newInstance0 (Class.java:326)
     at java.lang.Class.newInstance (Class.java:308)
     at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator (AbstractBundle.java:141)
     ... 61 more
 Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.SWTError
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal (BundleLoader.java:483)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.javahaps99)
     at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass (BundleLoader.javahaps87)
     at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass (DefaultClassLoader.java:87)
     at java.lang.ClassLoader.loadClass (ClassLoader.java:248)
     ... 67 more
 Root exception:
 java.lang.NoClassDefFoundError: org / eclipse / swt / SWTError

I already tried a couple of things after switching to a new infrastructure, to no avail:

  • Use another rt.jar file (one of the JRE windows) to build the PDE using the bootclasspath property.
  • Conquering the -os command line -os to: solaris

Is it even possible to build an RCP for a Windows application on a Unix machine? If so, do I need to change any parameters when starting the PDE assembly?

Note. We use pluginbuilder to configure PDE builds.

+4
source share
3 answers

The Eclipse that you use to build the PDE (i.e., the org.eclipse.ant.core.antRunner application) must be run in your server build environment. You said you are building on a Unix machine, but the ws and os options are set to win32. It looks like you are using the version of Eclipse for Windows on your Unix build server. This may not work, because Unix-specific fragments are usually not available there (necessary, for example, for SWT, so the SWTError class was not found).

You must download Eclipse from eclipse.org, which relates to your environment on your build server (OS, window system, and processor architecture) and use it to run the PDE build.

+2
source

Download the eclipse delta pack , unzip it to the target eclipse before starting the PDE build.

+1
source

You need to separate the eclipse that you use to make the assembly from the eclipse installation that you build with your assembly. The first should be correct for your build OS. Take a look at your PDE Build challenge. There are separate options for the installation and the target Eclipse platform.

0
source

Source: https://habr.com/ru/post/1347713/


All Articles