title: Exception in thread "main" java.lang.NoClassDefFoundError: org/neo4j/function/Function
body: <p>I have following application that connect to neo4j db:</p>
  
  <pre><code>package graphdb;
  
  import java.io.File;
  import java.io.IOException;
  
  import org.neo4j.graphdb.Direction;
  import org.neo4j.graphdb.GraphDatabaseService;
  import org.neo4j.graphdb.Node;
  import org.neo4j.graphdb.Relationship;
  import org.neo4j.graphdb.RelationshipType;
  import org.neo4j.graphdb.Transaction;
  import org.neo4j.graphdb.factory.GraphDatabaseFactory;
  import org.neo4j.io.fs.FileUtils;
  
  /**
   *
   * @author bma
   */
  public class Graphdb {
  
      private static final String DB_PATH = "D:\\Data";
  
      public String greeting;
  
      // START SNIPPET: vars
      GraphDatabaseService graphDb;
      Node firstNode;
      Node secondNode;
      Relationship relationship;
      // END SNIPPET: vars
  
      // START SNIPPET: createReltype
      private static enum RelTypes implements RelationshipType
      {
          KNOWS
      }
      // END SNIPPET: createReltype
  
      public static void main( final String[] args ) throws IOException
      {
          Graphdb hello = new Graphdb();
          hello.createDb();
          hello.removeData();
          hello.shutDown();
      }
  
      void createDb() throws IOException
      {
          FileUtils.deleteRecursively( new File( DB_PATH ) );
  
          // START SNIPPET: startDb
          graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
          registerShutdownHook( graphDb );
          // END SNIPPET: startDb
  
          // START SNIPPET: transaction
          try ( Transaction tx = graphDb.beginTx() )
          {
              // Database operations go here
              // END SNIPPET: transaction
              // START SNIPPET: addData
              firstNode = graphDb.createNode();
              firstNode.setProperty( "message", "Hello, " );
              secondNode = graphDb.createNode();
              secondNode.setProperty( "message", "World!" );
  
              relationship = firstNode.createRelationshipTo( secondNode, RelTypes.KNOWS );
              relationship.setProperty( "message", "brave Neo4j " );
              // END SNIPPET: addData
  
              // START SNIPPET: readData
              System.out.print( firstNode.getProperty( "message" ) );
              System.out.print( relationship.getProperty( "message" ) );
              System.out.print( secondNode.getProperty( "message" ) );
              // END SNIPPET: readData
  
              greeting = ( (String) firstNode.getProperty( "message" ) )
                         + ( (String) relationship.getProperty( "message" ) )
                         + ( (String) secondNode.getProperty( "message" ) );
  
              // START SNIPPET: transaction
              tx.success();
          }
          // END SNIPPET: transaction
      }
  
      void removeData()
      {
          try ( Transaction tx = graphDb.beginTx() )
          {
              // START SNIPPET: removingData
              // let's remove the data
              firstNode.getSingleRelationship( RelTypes.KNOWS, Direction.OUTGOING ).delete();
              firstNode.delete();
              secondNode.delete();
              // END SNIPPET: removingData
  
              tx.success();
          }
      }
  
      void shutDown()
      {
          System.out.println();
          System.out.println( "Shutting down database ..." );
          // START SNIPPET: shutdownServer
          graphDb.shutdown();
          // END SNIPPET: shutdownServer
      }
  
      // START SNIPPET: shutdownHook
      private static void registerShutdownHook( final GraphDatabaseService graphDb )
      {
          // Registers a shutdown hook for the Neo4j instance so that it
          // shuts down nicely when the VM exits (even if you "Ctrl-C" the
          // running application).
          Runtime.getRuntime().addShutdownHook( new Thread()
          {
              @Override
              public void run()
              {
                  graphDb.shutdown();
              }
          } );
      }
  
  }
  </code></pre>
  
  <p>When I try to compile, I've got the following error msg:</p>
  
  <pre><code>run:
  Exception in thread "main" java.lang.NoClassDefFoundError: org/neo4j/function/Function
      at org.neo4j.graphdb.factory.GraphDatabaseFactory.createGraphDatabaseBuilder(GraphDatabaseFactory.java:99)
      at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabaseBuilder(GraphDatabaseFactory.java:92)
      at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:76)
      at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:71)
      at graphdb.Graphdb.createDb(Graphdb.java:57)
      at graphdb.Graphdb.main(Graphdb.java:47)
  Caused by: java.lang.ClassNotFoundException: org.neo4j.function.Function
      at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
      ... 6 more
  Java Result: 1
  BUILD SUCCESSFUL (total time: 0 seconds)
  </code></pre>
  
  <p>What am I doing wrong?
  As you can see on picture, neo4j libs are added.</p>
  
  <p><img src="https://i.stack.imgur.com/hX2OM.png" alt="enter image description here"></p>