【问题标题】:Jar hell for missing classes folder when running ESRestTestCase运行 ESRestTestCase 时缺少类文件夹的 Jar 地狱
【发布时间】:2020-05-11 10:46:30
【问题描述】:

所以当我尝试使用-Dtest= 运行作为 ESRestTestCase (ESTestCase) 运行的单个集成测试时,我遇到了 Jar 地狱问题。这里的问题似乎是某些弹性搜索类路径验证类需要存在目标/类。但是,这个项目只是为了测试,所以这个要求没有意义。

这发生在 Elasticsearch 7.0.0 和 Java 1.8.0.251 中。不确定这是否是更高版本的问题。

java.lang.RuntimeException: found jar hell in test classpath
        at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:98)
        at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:229)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:623)
Caused by: java.nio.file.NoSuchFileException: <MY PROJECT FOLDER PATH HERE>/target/classes
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
        at sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:144)
        at java.nio.file.Files.readAttributes(Files.java:1737)
        at java.nio.file.FileTreeWalker.getAttributes(FileTreeWalker.java:219)
        at java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:276)
        at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:322)
        at java.nio.file.Files.walkFileTree(Files.java:2662)
        at java.nio.file.Files.walkFileTree(Files.java:2742)
        at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:199)
        at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:86)
        at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:96)
        ... 4 more

【问题讨论】:

    标签: java maven elasticsearch integration-testing


    【解决方案1】:

    起初我尝试了各种方法来确保仍然创建了 classes 文件夹。我遇到了new problems that seemed fixed in later versions,所以我升级到了 Elasticsearch 7.6.2(和 lucene 8.4.0)。升级似乎消除了该文件夹存在的需要,但引发了其他问题 (similar to this)。我使用-Dtests.security.manager=false 解决了这些问题。然后我得到了thread leak issues,我通过在测试类上设置@ThreadLeakScope(ThreadLeakScope.Scope.NONE)“解决了”这个问题。

    最后,在命令行中运行 maven 进行单个测试时,它似乎可以正常工作。但是,当尝试在 Intellij 中使用调试器运行 maven 任务时,调试器似乎没有附加。

    所以我尝试在 Intellij 中将其作为 JUnit 模板化测试运行。在这里,我在运行它时会遇到 jar 地狱,但它可以调试。 jar 地狱后来通过在idea.properties 中设置idea.no.launcher=true 来解决。

    好的,现在已经足够了。这些解决方法远非理想,但它适用于我目前的目的。无论如何,在进入主线之前,很多事情都会发生变化。也许这会帮助别人。希望我以后可以发布更好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 2011-11-11
      • 1970-01-01
      相关资源
      最近更新 更多