【问题标题】:Errors in exporting eclipse deployable plug-ins and fragments导出eclipse可部署插件和片段时出错
【发布时间】:2012-12-21 03:16:32
【问题描述】:

我有一个 Eclipse 插件在 Eclipse 环境中运行良好。

我想将其导出为 jar 文件,因此我选择了“导出”>“可部署的插件和片段”。

我可以得到一个jar文件,但是报错了。

打开日志文件,它报告我有 1242 个问题(191 个错误,1051 个警告)。这是错误日志中的一些副本。

2. ERROR in /Users/LSclipse/src/lsclipse/LSDiffRunner.java (at line 61)
    import edu.washington.cs.induction.OnePipeLineScript;
           ^^^
The import edu cannot be resolved
----------
3. ERROR in /Users/LSclipse/src/lsclipse/LSDiffRunner.java (at line 261)
    OnePipeLineScript.getMatchingForRefFinder(projName, proj1, proj1Loc
    ^^^^^^^^^^^^^^^^^
OnePipeLineScript cannot be resolved

为什么我会出错?我有 2049 个警告,但在 eclipse IDE 中编译插件时没有错误。

添加

主项目引用了另外两个项目,并引用了许多外部库。我附上了包视图和 Java 构建路径。

【问题讨论】:

  • 您是否直接将第三方库添加到类路径中以便在 IDE 中构建它们?
  • 好吧,我不确定“直接将第三方库添加到类路径中”。我在我的 OP 中添加了 Java 构建路径的屏幕截图。

标签: eclipse eclipse-plugin


【解决方案1】:

此问题涉及多个问题。然而,核心问题是项目apimatchingoriginanalysis 不是eclipse 插件,而只是java 项目。结果,这两个项目没有包含在最终的 jar 文件中以破坏构建。

将两个项目符号链接到主项目中

我通过将 src 目录符号链接到主 eclipse 插件项目来解决了这个问题。

ln -s /workspace/seal/edu.ucsc.originanalysis/src /LSclipse/originanalysis
ln -s /workspace/seal/edu.ucsc.apimatching/src /LSclipse/apimatching

从 Java 构建路径/源选项卡中,我将这两个包含的项目添加为源。 Eclipse Java Missing required source folder: 'src'

现在我有没有错误的 eclipse 插件 jar 文件。

然后点击 F-5 刷新项目资源管理器并检查它们是 java src 目录。

在构建选项卡中选择包含的项目。

在 build.properties 选项卡中更新 bin.includesource.. 很重要。应该明白,在bin.include 中,排序也很关键。 lib/cdtparser.jar 和 lib/cdtcore.jar 应该放在它们的用户之前 - origin analysis/

将包含项目的jar文件复制到主项目中

我还必须将这些项目文件中的一些 jar 文件复制到主项目中,并在 Binary Build 选项卡中选择它们。

并在 Runtime/Classpath 选项卡中添加 tim。

在执行环境中选择 JavaSE-1.6。

我有很多“必须重写超类方法”错误。根据这篇文章的提示 - 'Must Override a Superclass Method' Errors after importing a project into Eclipse ,我删除了 J2SE-1.5 来解决这个问题。

【讨论】:

  • 很高兴听到,如果我的回答帮助您走上正确的道路,请接受!将非插件代码包装为 jars 并包含在插件中并添加到插件类路径中是常见的做法
  • 嗯,导出不起作用的主要原因是链接文件夹没有正确包含和设置。我使用符号链接解决了这个问题。我认为使用 jar 是有意义的,但就我的目的而言,使用符号链接更简单,更容易完成我的工作。不过,感谢您的友好回答。
【解决方案2】:

开发插件时不能将第三方库添加到Java的类路径中。它是构建标准Java应用程序的方式,但插件是一种具有itself rule for class loading的OSGi包。

正确的方法是将第三方库添加到插件的类路径中。

将以下声明添加到插件的 MANIFEST.MF 中,

Bundle-ClassPath: lib/log4j-1.2.7.jar,
 xml-apis.jar,
 ...

检查这些链接 [1][2] 以了解它。

【讨论】:

  • 我检查了 MANIFEST.MF 发现 Bundle-ClassPath 声明正确。
  • 那些库在 build.properties 中怎么样?例如,bin.includes=lib/xml-apis.jar
  • build.properties 中也包含所有内容。在导出捆绑包的过程中,会生成并执行 ANT 构建文件。日志文件说我在编译中遇到了一堆错误。我不知道为什么在 Eclipse IDE 中一切正常时会出现这些错误?
【解决方案3】:

这是有问题的,并被视为潜在问题的潜在解决方案。

  1. 这个类是来自引用的 jar 还是在实际插件 edu.washington.cs.induction.OnePipeLineScript 中;

  2. 您似乎有很多错误的文件夹,想知道您的 build.properties 文件是否显示任何警告,并且您还为 build.properties 源中的每个源文件夹定义了这个。 /

  3. 您的外部 jar 库似乎位于源类型不正确的文件夹中。它应该是一个非源文件夹(您可以通过包图标装饰器告诉源文件夹),并且您应该确保在清单编辑器中为运行时检查了 lib,以便它在构建中包含 jar。要将其取消标记为源文件夹,请在导航器视图中选择下拉菜单,转到过滤器并取消选中 .resources ,然后将在该文件中显示 .classpath 文件,您将看到该文件夹​​为 kind="src" (我相信)删除它。

  4. 不知何故,您似乎也链接了源文件夹,这是我不建议的做法,并且不确定在导出插件时是否会导致问题。如果您可以避免链接源文件夹会更好。

另外,您似乎将普通 java 应用程序的 java 构建路径配置与在 OSGI 中运行的插件混淆了,这些插件不是通过 java 构建路径配置的,而是您的 manifest.editor 所以作为一个经验法则,如果它是一个插件不要因为 OSGI 不同,所以甚至不用尝试配置 java 构建路径,这也可能导致问题

【讨论】:

    【解决方案4】:

    在选项中选择“使用工作区中编译的类文件”对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      相关资源
      最近更新 更多