Java 运行ESRestTestCase时缺少类文件夹的Jar地狱
因此,我在尝试使用作为ESRestTestCase(ESTestCase)运行的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
-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来解决
好吧,现在就足够了。这些变通办法远非理想,但它符合我目前的目的。在进入主线之前,很多事情都会发生变化。也许这会帮助其他人。希望以后我能发布一个更好的解决方案