Search code examples
javaneo4jdependenciespom.xml

Neo4j-harness throws java noclassdeffound exception for Scala.Serializable


When attempting to test a neo4j server using neo4j-harness, I get a noclassdeffound exception when building the embedded Neo4j server

private final Neo4j embeddedNeo4jServer = Neo4jBuilders.newInProcessBuilder()
        .withDisabledServer()
        .withFixture("")
        .build(); // exception here

My pom.xml looks like this:

  <dependencies>
  
    <!-- Core Dependencies -->
    
        <dependency><groupId>org.neo4j.driver</groupId><artifactId>neo4j-java-driver</artifactId><version>4.4.5</version></dependency>
        <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><version>3.0.0</version></dependency>
        <dependency><groupId>org.apache.curator</groupId><artifactId>curator-x-discovery</artifactId><version>4.2.0</version></dependency>
        <dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20211205</version></dependency>
        <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.30</version></dependency>
        
    <!-- Test Dependencies -->
        
        <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.8.2</version><scope>test</scope></dependency>
        <dependency><groupId>org.skyscreamer</groupId><artifactId>jsonassert</artifactId><version>1.5.0</version><scope>test</scope></dependency>
        <dependency><groupId>org.neo4j.test</groupId><artifactId>neo4j-harness</artifactId><version>4.4.5</version><scope>test</scope></dependency>
        
        <!-- Spring dependencies for an embedded Kafka instance -->
        <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.3</version><scope>test</scope></dependency>
        <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka-test</artifactId><scope>test</scope><version>2.8.3</version></dependency>
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><version>2.6.4</version>
            <exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency>
        
        <!-- Mockito dependencies - NOTE: the inline dependency replaces the core one, but might be removed in future versions-->
        <!--<dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>4.4.0</version><scope>test</scope></dependency>-->
        <dependency><groupId>org.mockito</groupId><artifactId>mockito-junit-jupiter</artifactId><version>4.4.0</version><scope>test</scope></dependency>
        <dependency><groupId>org.mockito</groupId><artifactId>mockito-inline</artifactId><version>4.4.0</version><scope>test</scope></dependency>
  </dependencies>

Solution

  • There is a clash in the version of scala-library used in spring-kafka-test and neo4j-harness.

    To resolve this, you can exclude the scala dependency from spring-kafka-test, meaning the neo4j-harness version will be used for both.

    To do this, add an exclusion in the pom.xml:

    <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka-test</artifactId><scope>test</scope><version>2.8.3</version>
                <exclusions><exclusion><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId></exclusion></exclusions></dependency>