将couchbase java-client升级到2.6.1之后,在应用程序启动时出现以下错误:
exception is java.lang.NoClassDefFoundError: com/couchbase/client/encryption/CryptoManager
快速调查后,发现它支持字段级加密was added since 2.6.0。
问题似乎是以下传递依赖项:
<dependency>
<groupId>com.couchbase.client</groupId>
<artifactId>encryption</artifactId>
<version>${encryptionextension.version}</version>
<optional>true</optional>
</dependency>
标记为可选,但是它在DefaultCouchbaseEnvironment
中声明,因此不能为可选。
此问题的快速解决方案是将“加密”传递依赖项显式添加到类路径。但是,这似乎是一个错误,它将迫使所有客户端遇到相同的问题。
更新 重现此问题的最简单方法是调用以下代码:
DefaultCouchbaseEnvironment.class.getDeclaredMethods();
当将coucbase环境作为spring bean加载时,spring会调用此代码。我设法将问题隔离到导致问题的单行代码中。