试图找出 `mongodb-driver-sync v 4.6.0` 和 `mongo-java-driver v 3.12.10` 之间的区别

Trying to figure out differences between `mongodb-driver-sync v 4.6.0` and `mongo-java-driver v 3.12.10`

我们在 Clojure 项目中使用 CongoMongo 工具包:

https://github.com/congomongo/congomongo

这取决于遗留 Java 驱动程序(在 project.clj 中):

[org.mongodb/mongo-java-driver "3.12.10"]

我现在正在尝试推出我自己的 Clojure 包装器,因为我们需要升级到现代 API。它引用:

[org.mongodb/mongodb-driver-sync "4.6.0"]

将两者都包含在我们的项目中导致了冲突:

Syntax error (IllegalAccessError) compiling at (/tmp/form-init13152456523068551352.clj:1:74).
failed to access class com.mongodb.client.internal.MongoClientDelegate from class com.mongodb.Mongo (com.mongodb.client.internal.MongoClientDelegate and com.mongodb.Mongo are in unnamed module of loader 'app')

然后我更改了包装器以使用相同的 3.12.10 驱动程序。现在一切正常。 CongoMongo 使用旧版驱动程序,我的包装器使用现代驱动程序,并且没有冲突。

这是预期的行为吗? mongo-java-driver 是否包括旧版驱动程序和现代驱动程序?或者我应该注意什么区别?

是的,3.x 系列驱动程序包含传统 API 和现代 API,但 4.x 系列仅包含现代 API .

您可以通过查看 JAR 文件来了解这一点:

(! 802)-> jar tvf ~/.m2/repository/org/mongodb/mongodb-driver-sync/4.6.0/mongodb-driver-sync-4.6.0.jar|fgrep ClientOptions

(! 803)-> jar tvf ~/.m2/repository/org/mongodb/mongodb-driver-core/4.6.0/mongodb-driver-core-4.6.0.jar|fgrep ClientOptions

(! 804)-> jar tvf ~/.m2/repository/org/mongodb/mongo-java-driver/3.12.0/mongo-java-driver-3.12.0.jar|fgrep ClientOptions
 20111 Tue Dec 10 09:49:24 PST 2019 com/mongodb/MongoClientOptions.class
   226 Tue Dec 10 09:49:24 PST 2019 com/mongodb/MongoClientOptions.class
 18642 Tue Dec 10 09:49:24 PST 2019 com/mongodb/MongoClientOptions$Builder.class

(! 805)-> jar tvf ~/.m2/repository/org/mongodb/mongodb-driver-sync/4.6.0/mongodb-driver-sync-4.6.0.jar|fgrep ClientSetting

(! 806)-> jar tvf ~/.m2/repository/org/mongodb/mongodb-driver-core/4.6.0/mongodb-driver-core-4.6.0.jar|fgrep ClientSetting
   229 Mon Apr 18 23:54:24 PDT 2022 com/mongodb/MongoClientSettings.class
 16809 Mon Apr 18 23:54:24 PDT 2022 com/mongodb/MongoClientSettings$Builder.class
 12947 Mon Apr 18 23:54:24 PDT 2022 com/mongodb/MongoClientSettings.class

(! 807)-> jar tvf ~/.m2/repository/org/mongodb/mongo-java-driver/3.12.0/mongo-java-driver-3.12.0.jar|fgrep ClientSetting
   229 Tue Dec 10 09:49:24 PST 2019 com/mongodb/MongoClientSettings.class
  9292 Tue Dec 10 09:49:24 PST 2019 com/mongodb/MongoClientSettings.class
 14842 Tue Dec 10 09:49:24 PST 2019 com/mongodb/MongoClientSettings$Builder.class

MongoClientOptions 是传统 API 的一部分,MongoClientSettings 是现代 API 的一部分。