elasticsearch,integration-testing,Java,Maven,elasticsearch,Integration Testing" /> elasticsearch,integration-testing,Java,Maven,elasticsearch,Integration Testing" />

Java 运行ESRestTestCase时缺少类文件夹的Jar地狱

Java 运行ESRestTestCase时缺少类文件夹的Jar地狱,java,maven,elasticsearch,integration-testing,Java,Maven,elasticsearch,Integration Testing,因此,我在尝试使用作为ESRestTestCase(ESTestCase)运行的-Dtest=运行单个集成测试时遇到了一个Jar地狱问题。这里的问题似乎是某些elasticsearch类路径验证类需要存在目标/类。然而,这个项目只是为了测试,所以这个需求没有意义 Elasticsearch 7.0.0和Java 1.8.0.251就是这样。不确定这是否是更高版本的问题 java.lang.RuntimeException: found jar hell in test classpath

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

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.lang.RuntimeException:在测试类路径中找到jar地狱
在org.elasticsearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:98)
位于org.elasticsearch.test.ESTestCase(ESTestCase.java:229)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:348)
在com.carrotsearch.randomizedtesting.RandomizedRunner$2.run上(RandomizedRunner.java:623)
原因:java.nio.file.NoSuchFileException:/target/classes
位于sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
位于sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
位于sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
位于sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
位于sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:144)
位于java.nio.file.Files.readAttributes(Files.java:1737)
位于java.nio.file.FileTreeWalker.getAttributes(FileTreeWalker.java:219)
访问java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:276)
位于java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:322)
位于java.nio.file.Files.walkFileTree(Files.java:2662)
位于java.nio.file.Files.walkFileTree(Files.java:2742)
位于org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:199)
位于org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:86)
在org.elasticsearch.bootstrap.BootstrapForTesting.(BootstrapForTesting.java:96)
... 4更多

起初,我尝试了各种方法来确保classes文件夹仍然被创建。我遇到了问题,所以升级到Elasticsearch 7.6.2(和lucene 8.4.0)。升级似乎消除了文件夹存在的必要性,但引发了其他问题()。我使用
-Dtests.security.manager=false解决了这些问题。然后,我通过在测试类上设置
@ThreadLeakScope(ThreadLeakScope.Scope.NONE)
来“解决”这个问题

最后,当在命令行中为单个测试运行maven时,它似乎起到了作用。但是当尝试在Intellij中使用调试器运行maven任务时,调试器似乎没有附加

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

好吧,现在就足够了。这些变通办法远非理想,但它符合我目前的目的。在进入主线之前,很多事情都会发生变化。也许这会帮助其他人。希望以后我能发布一个更好的解决方案