簡體   English   中英

java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/Layout 同時使用 ESIntegTestCase 運行集成測試

[英]java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/Layout while running integration test using ESIntegTestCase

我正在嘗試在 Java 中為 ElasticSearch 設置集成測試。

我擴展了ESIntegTestCase並嘗試運行一個虛擬的空測試。 由於測試,我收到此異常:

java.lang.NoClassDefFoundError: org/apache/logging/log4j/core/Layout
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166)
    at java.base/java.lang.Class.getMethodsRecursive(Class.java:3307)
    at java.base/java.lang.Class.getMethod0(Class.java:3293)
    at java.base/java.lang.Class.getMethod(Class.java:2106)
    at org.apache.maven.surefire.util.ReflectionUtils.tryGetMethod(ReflectionUtils.java:60)
    at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.isSuiteOnly(JUnit3TestChecker.java:65)
    at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.isValidJUnit3Test(JUnit3TestChecker.java:60)
    at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.accept(JUnit3TestChecker.java:55)
    at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.accept(JUnit4TestChecker.java:53)
    at org.apache.maven.surefire.util.DefaultScanResult.applyFilter(DefaultScanResult.java:102)
    at org.apache.maven.surefire.junit4.JUnit4Provider.scanClassPath(JUnit4Provider.java:309)
    at org.apache.maven.surefire.junit4.JUnit4Provider.setTestsToRun(JUnit4Provider.java:189)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:132)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:379)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:340)
    at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:125)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:413)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.core.Layout
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 18 more

僅當我運行任何測試或嘗試構建模塊時才會發生這種情況,而在這種情況下,測試類擴展了來自 Elasticsearch 測試框架的任何類ESIntegTestCase 如果測試類沒有擴展任何東西 - 測試運行得很好。

這是我的 POM:

    <dependencies>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.4.1</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>6.4.1</version>                    
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.1.1.RELEASE</version>            
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.groupid</groupId>
            <artifactId>myModule0</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>jar</type>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.data</groupId>
                    <artifactId>spring-data-elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.groupid</groupId>
            <artifactId>myModule1</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>jar</type>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>transport</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.data</groupId>
                    <artifactId>spring-data-elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.test</groupId>
            <artifactId>framework</artifactId>
<!--  tried different versions, nothing seem to resolve this-->
            <version>7.6.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

它也是一個模塊的子項,它遵循 spring-boot-starter-web:2.0.5.RELEASE 的排除:

          <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>transport</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.data</groupId>
                    <artifactId>spring-data-elasticsearch</artifactId>
                </exclusion>
            </exclusions>

有什么問題?

這是因為 Elasticsearch ( org.elasticsearch:elasticsearch ) 依賴於 Log4J 2 API 而 Elasticsearch 測試框架 ( org.elasticsearch.test:framework ) 依賴於 Elasticsearch。 在您的測試類路徑中導入 Log4J 2 Core(實現)應該可以解決問題:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.11.1</version><!-- Elasticsearch v7.6.2 -->
  <scope>test</scope>
</dependency>

https://github.com/elastic/elasticsearch/blob/v7.6.2/buildSrc/version.properties#L19

您可以通過檢查您的 Maven 項目依賴項來找到這種關系:

mvn dependency:tree

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM