如何让 hamcrest-all 进入 Eclipse Xtext 插件项目

How do I get hamcrest-all into an Eclipse Xtext plugin project

在周末的大部分时间里,我一直在努力尝试将 hacrest-all:1.3.0hamcrest:2.2.0(首选)添加到我新生成的 Xtext 21.1 插件项目中。

据我所知,问题与依赖于 hamcrest.core:1.3.0 的 xtext.testing 包有关,这是 orbit p2 存储库中唯一的包。没问题,我将手动添加罐子,但只要我实际调用任何 org.hamcres.Matchers.*,我就会...

java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package

废话。我已经尝试了几乎所有可以想象的方式来获得这种依赖性(好吧,四个,maven/jars x 1.3.0/2.2.0)。

奇怪的是我在 older Xtext project.

上做的很好

但是当我使用向导创建一个新的 Xtext 项目时,我似乎无法再连接任何有用的 hacrest 匹配器。

我只是从上一个项目复制了相同的设置(jar 文件链接在 build.properties),但我在这个新项目中似乎无能为力。

知道我做错了什么吗?

如果有帮助,可以在 org.agileware.natural.jbehave2.tests 中找到完整的源代码。

感谢您的宝贵时间!

更新

我刚刚意识到与旧项目的区别。它没有使用 maven!!所以我们找到了问题的根源......有没有办法在不放弃 Maven 构建的情况下修复它?我非常希望不依赖于 Eclipse IDE 进行构建,谢谢!

除了将其添加到 build.properties 之外,我还必须打开项目设置并手动将 jar 添加到 Java Build Path -> Libraries。虽然并非所有 jar 都绝对必要,但这允许指定导入顺序,如预期的那样给予包含的 jar 第一优先权。

更新

以下是我为顺利 运行 完成所有操作所采取的步骤。

  1. 抓住 hamcrest-2。2.jar 并将它们放在一个包中的某个地方。

  2. 在测试项目的 build.properties 中设置 jars.extra.classpath,如下所示:

    jars.extra.classpath = platform:/plugin/org.example.mydsl.testing/lib/hamcrest-2.2.jar
    
  3. 测试项目中的 MANIFEST.MF 应该有 Require-BundleImport-Package 部分类似于:

Require-Bundle: org.example.mydsl,
 org.example.mydsl.testing,
 org.eclipse.xtext.testing,
 org.eclipse.xtext.xbase.testing,
 org.eclipse.xtext.xbase.lib;bundle-version="2.14.0"
Import-Package: org.apache.commons.logging,
 org.apache.log4j,
 org.junit,
 org.junit.runner,
 org.junit.runner.manipulation,
 org.junit.runner.notification,
 org.junit.runners,
 org.junit.runners.model

我可能遗漏了一个步骤,但可以在 rlogiacco/Natural

中找到完整的解决方案