And*_*ann 3 intellij-idea elasticsearch kotlin
我正在尝试使用提供的 Elasticsearch java 测试框架对我的 es 项目进行一些集成测试。我在 IntelliJ 中有一个非常简单的测试设置:
class FormTest : ESIntegTestCase() {
override fun nodeSettings(nodeOrdinal: Int): Settings = Settings.builder()
.put(super.nodeSettings(nodeOrdinal))
//.put("node.mode", "network")
.build()
@org.junit.Test fun start() {
ensureGreen()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,出现以下异常:
java.lang.RuntimeException: found jar hell in test classpath
at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:92)
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: jar hell!
duplicate jar [C:\Users\user\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\181.5281.24\lib\idea_rt.jar] on classpath: ...
at org.elasticsearch.bootstrap.JarHell.parseClassPath(JarHell.java:142)
at org.elasticsearch.bootstrap.JarHell.parseClassPath(JarHell.java:98)
at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:89)
at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:90)
... 4 more
Run Code Online (Sandbox Code Playgroud)
我找到了一些绕过 jar 地狱检查的方法,但如何解决问题?
当我偶然发现时,我遇到了同样的问题:https : //github.com/elastic/elasticsearch/blob/master/CONTRIBUTING.md#configuring-ides-and-running-tests
特别是,我必须设置idea.no.launcher=true并重新启动我的 IntelliJ。
为了直接从 IDEA 2017.2 及以上版本运行测试,需要禁用 IDEA 运行启动器以避免idea_rt.jar 导致“jar 地狱”。这可以通过添加 -Didea.no.launcher=true JVM 选项来实现。或者,可以在idea.properties中设置idea.no.launcher=true
此外,您可能需要:
对于 IDEA 2017.3 及以上版本,除了 JVM 选项之外,您还需要转到 Run->Edit Configurations->...->Defaults->JUnit 并验证 Shorten 命令行设置是否设置为用户本地默认值: 没有任何。如果被报告为 jar 地狱的来源,您可能还需要从类路径中删除 ant-javafx.jar。
最后,确保你有断言:
Elasticsearch 代码库大量使用 Java 断言,并且测试运行程序要求在 JVM 中启用断言。这可以通过在启动时将标志 -ea 传递给 JVM 来实现。
| 归档时间: |
|
| 查看次数: |
889 次 |
| 最近记录: |