2011-04-12 76 views
4

我们正在尝试通过Hudson/Jenkins为RCP应用程序执行Eclipse PDE构建。我们在一台Windows机器(在Windows Server 2003上运行的Hudson)上成功完成了这项工作。我们决定将我们的CI系统移至unix机器。 当UNIX机器我们的构建失败,出现以下错误上执行相同的构建:在Unix机器上构建Windows RCP应用程序

 
!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.java:346) 
    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:370) 
    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.java:399) 
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:387) 
    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:554) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:524) 
    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:370) 
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:446) 
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:399) 
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:387) 
    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:315) 
    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.java:346) 
    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:510) 
    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.java:386) 
    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:597) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) 
    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.java:399) 
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:387) 
    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 

我已经试过几件事情转移到新的基础设施后,有没有效果:

  • 使用bootclasspath属性为PDE构建使用不同的rt.jar(一个来自Windows JRE)。
  • 长宁-os命令行参数:solaris

是它在所有可能做一个RCP建立在Unix机器上的Windows应用程序? 如果是,启动PDE构建时是否需要更改任何参数?我们使用pluginbuilder来设置PDE构建。

回答

2

您用于执行PDE构建(即org.eclipse.ant.core.antRunner应用程序)的Eclipse必须在构建服务器环境中可执行。你说你在Unix机器上执行build,但是ws和os参数设置为win32。因此,您似乎在Unix构建服务器上使用了Windows的Eclipse版本。这是行不通的,因为特定于Unix的片段通常在那里不可用(例如SWT所需的,这就是为什么没有找到类SWTError)。

您应该从构建服务器(OS,窗口系统和处理器体系结构)上的环境特定的eclipse.org下载Eclipse,并使用它运行PDE构建。

+1

设置'os = solaris','ws = sgtk'和'arch = sparc'摆脱了SWTError。我正在打下一个路障:-(。谢谢你的回复! – dfme 2011-04-13 14:38:03

1

下载eclipse delta pack,在开始PDE构建之前将它解压缩到您的目标eclipse中。

+0

我们的TP已经包含来自增量包的插件。 – dfme 2011-04-13 14:33:53

+0

不幸的是,在你的目标中包含Delta软件包的本地库并不意味着当你让Equinox将特定于平台的版本集合在一起时,它们会自动部署。作为一种解决方法,您可以简单地从delta软件包的插件目录复制相应的库(例如'org.eclipse.swt.gtk.linux.x86_64_xxx.jar'作为'linux.gtk.x86_64'版本) 到插件目录手动输入新鲜出口的版本。因为显然这是一个捆绑框架。 – 2015-04-08 16:10:35

0

您需要分离您正在使用的eclipse来执行您正在与构建一起放置的eclipse安装的构建。第一个需要适合您的构建操作系统。看看你的PDE构建调用。 Eclipse安装和目标平台有单独的参数。

相关问题