我正在尝试从2.3.4升级到ES 6.2。
以前,我们通过使用NodeBuilder并运行本地ES节点来集成测试代码。如果可能的话,我更愿意把它换成ESIntegTestCase的用法。
然而,当我尝试运行集成测试时,我得到了以下错误:
`at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:164) at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:190) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:592) Caused by: java.lang.IllegalStateException: codebase property already set: codebase.metrics-core -> file:/Users/me/.m2/repository/io/dropwizard/metrics/metrics-core/3.1.0/metrics-core-3.1.0.jar, cannot set to file:/Users/me/.m2/repository/com/yammer/metrics/metrics-core/2.2.0/metrics-core-2.2.0.jar at org.elasticsearch.bootstrap.Security.readPolicy(Security.java:236) at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:139) ... 4 more`
这意味着什么,我如何才能修复它?
我的测试类被注释为:@RunWith(com.carrotsearch.randomizedtesting.RandomizedRunner.class)
并扩展了ESIntegTestCase
,如果这有帮助的话。
感谢任何人能提供的任何帮助!
发布于 2018-06-14 20:16:52
根据这个问题:除非你正在测试一个插件或类似的东西,否则也不应该再真正使用https://github.com/elastic/elasticsearch/issues/21544 ESIntegTestCase (参见这里的回复帖子:https://discuss.elastic.co/t/how-do-i-deal-with-this-particular-jar-hell-issue/135662/4)。
查看此处了解更多信息:https://discuss.elastic.co/t/codebase-property-already-set-when-running-esintegtestcase/135659/2
我现在找到的使用elasticsearch进行集成测试的最佳方法在讨论帖子中提到:使用测试容器-elasticsearch (https://github.com/dadoonet/testcontainers-java-module-elasticsearch)
您需要在运行测试的机器上安装docker,但它会自动拉取所需的docker镜像,启动容器并在结束时再次将其拆除。
发布于 2018-08-27 06:19:33
如果开发一个插件仍然需要嵌入式ES,那么设置系统属性-Dtests.gradle=false
也许可以解决这个问题。
由于BootstrapForTesting.java L175包含:
if (System.getProperty("tests.gradle") == null) {
addClassCodebase(codebases, "plugin-classloader", "org.elasticsearch.plugins.ExtendedPluginsClassLoader");
addClassCodebase(codebases, "elasticsearch-secure-sm", "org.elasticsearch.secure_sm.SecureSM");
}
https://stackoverflow.com/questions/50833920
复制相似问题