【问题标题】:NoClassDefFoundError: Unable to run Tycho-built Eclipse RCP application under Linux/Mac OSNoClassDefFoundError:无法在 Linux/Mac OS 下运行 Tycho 构建的 Eclipse RCP 应用程序
【发布时间】:2012-10-15 10:13:48
【问题描述】:

我正在 Win 7(64 位)、Indigo/Java 1.6 中开发跨平台 RCP 应用程序,使用 Tycho 构建产品。

虽然应用程序在 eclipse 中的运行配置中运行良好,并且 Win x_86_64 构建也运行良好,但我在 xubuntu(使用 OpenJDK Java 6 Runtime (1.6.0_24) 和 Mac OS X (1.6 .0_35)。

错误(在 Linux 上)如下所示(运行 java myprogram):

Exception in thread "main" java.lang.NoClassDefFoundError: myprogram
Caused by: java.lang.ClassNotFoundException: myprogram
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: myprogram. Program will exit.

我确定我以前遇到过这种情况,并且我认为这很愚蠢(这在 AFAIK 之前的 Windows 上发生过,并且由于某种原因重新安装 Java 修复了它)。然而,在这种情况下,我认为它必须与构建/目标平台/Tycho 设置有关。

我的父 POM 中负责跨平台构建的部分看起来不够可疑:

    <plugin>
      <groupId>org.eclipse.tycho</groupId>
      <artifactId>target-platform-configuration</artifactId>
      <version>${tycho-version}</version>
      <configuration>
        <resolver>p2</resolver>
        <pomDependencies>consider</pomDependencies>
        <!-- configure the p2 target environments for multi-platform build -->
        <environments>

          <environment>
            <os>linux</os>
            <ws>gtk</ws>
            <arch>x86</arch>
          </environment>
          <environment>
            <os>linux</os>
            <ws>gtk</ws>
            <arch>x86_64</arch>
          </environment>
          <environment>
            <os>win32</os>
            <ws>win32</ws>
            <arch>x86</arch>
          </environment>

          <environment>
            <os>win32</os>
            <ws>win32</ws>
            <arch>x86_64</arch>
          </environment>
          <environment>
            <os>macosx</os>
            <ws>cocoa</ws>
            <arch>x86_64</arch>
          </environment>
        </environments>
      </configuration>
    </plugin>

有人知道为什么这可能行不通吗? 非常感谢!

【问题讨论】:

  • 我收到与 java myprogram -X 完全相同的错误消息

标签: cross-platform eclipse-rcp classnotfoundexception tycho target-platform


【解决方案1】:

这不是您运行 Eclipse RCP 应用程序的方式。

您需要使用适当的本机启动器启动它,或者使用java -jar plugins/org.eclipse.equinox.launcher_(yourVersion).jar(请参阅this documentation)和可能进一步的参数来选择您的application

此外,您需要确保在您的应用程序中拥有 Equinox 启动所需的包。您可以通过在产品中包含 org.eclipse.rcp 功能来做到这一点。

【讨论】:

  • 谢谢,java -jar 版本在两个操作系统上都能完美运行。关于原生发射器:我希望 Tycho 会为我创建这些。我已经阅读了有关它们的信息,但是所有的帖子等我已经阅读过提到 Delta Pack 作为交易的一部分,而我认为不再需要包含它了因为(如果我没记错的话)必要的插件都可以在 eclipse p2 中使用......我错了吗?
  • 另外,本地启动器确实存在,但是当我在 Finder 中双击 Linux 启动器时,什么也没有发生。 Mac OS X 中的myprogram.app 也不做任何事情。我猜他们在我的产品配置中配置不当(即根本没有配置)。
  • 如果您已正确配置所有内容,则本机启动器确实可以工作 - 请参阅 this tutorial 以获取工作示例。 Tycho 需要org.eclipse.equinox.executable 功能(又名“delta 包”),但它通常会自动将其从 Eclipse 发布序列存储库中拉出。
  • 感谢您的链接。我会好好看看那里的设置,并在 EclipseCon Europe 上仔细聆听您即将发布的教程:)。
猜你喜欢
  • 2013-02-10
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 2015-10-04
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多