Error connecting cluster: ClassNotFoundException: com.couchbase.client.core.env.Authenticator

I’m new to java development, I’m trying to add Couchbase Java SDK to an existing Java project build with Maven. As per documentation I added mvn dependency

<dependency>
  <groupId>com.couchbase.client</groupId>
  <artifactId>java-client</artifactId>
  <version>3.0.4</version>
</dependency>

then added code to connect to cluster:

private void initCouchbaseClient(DcpStateHelperConfig config) {
    cluster = Cluster.connect(config.getCluster(), config.getUser(), config.getPassword());
    bucket = cluster.bucket(config.getBucket());
    collection = bucket.defaultCollection();
}

When performing first instruction of initCouchbaseClient function I get the following error:

Exception in thread "main" java.lang.NoClassDefFoundError: com/couchbase/client/core/env/Authenticator
        at com.ff3d.rabbitmq_couchbase_connector.DcpStateHelper.initCouchbaseClient(DcpStateHelper.java:38)
        at com.ff3d.rabbitmq_couchbase_connector.DcpStateHelper.<init>(DcpStateHelper.java:33)
        at com.ff3d.rabbitmq_couchbase_connector.DCPStream.init(DCPStream.java:52)
        at com.ff3d.rabbitmq_couchbase_connector.CbRabbitConnector.main(CbRabbitConnector.java:70)
Caused by: java.lang.ClassNotFoundException: com.couchbase.client.core.env.Authenticator
        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

Any idea about what I’m doing worng?

Thanks
Paolo

Might it be a dependency conflict due to the presence of DCP Client in pom.xml?

<dependency>
  <groupId>com.couchbase.client</groupId>
  <artifactId>java-client</artifactId>
  <version>3.0.4</version>
</dependency>
<dependency>
  <groupId>com.couchbase.client</groupId>
  <artifactId>dcp-client</artifactId>
  <version>0.26.0</version>
</dependency>
1 Like

Hi Paolo,

I think you found the source of the problem. DCP client 0.26.0 is not compatible with Java SDK 3.x. Try upgrading to DCP client 0.27.0 which does not have the conflict.

Thanks,
David

Thanks David for your quick reply. I moved t 0.27.0 client but still have some issue. If I put sdk dependency after DCP one in pom file, I got multiple compile time errors:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/paolomorgano/Development/projects/h2h/rabbitmq-couchbase-connector/src/main/java/com/ff3d/rabbitmq_couchbase_connector/DCPEventListener.java:[6,48] error: package com.couchbase.client.deps.io.netty.buffer does not exist
[ERROR] /Users/paolomorgano/Development/projects/h2h/rabbitmq-couchbase-connector/src/main/java/com/ff3d/rabbitmq_couchbase_connector/DCPEventListener.java:[10,21] error: cannot find symbol
[ERROR]  interface DCPEventListener
[...]

Also downgrading SDK to 3.0.3 as per your integration test file didn’t helped

The Netty dependency from the DCP client is in a new location. You’ll need to update the imports.