项目中在使用morphia的find命令的时候出现如下错误
Exception in thread "pool-1-thread-3" java.lang.NoClassDefFoundError: com/mongodb/client/model/DBCollectionFindOptions
at org.mongodb.morphia.query.FindOptions.<init>(FindOptions.java:36)
at org.mongodb.morphia.query.QueryImpl.getOptions(QueryImpl.java:57)
at org.mongodb.morphia.query.QueryImpl.<init>(QueryImpl.java:81)
at org.mongodb.morphia.query.DefaultQueryFactory.createQuery(DefaultQueryFactory.java:15)
at org.mongodb.morphia.query.AbstractQueryFactory.createQuery(AbstractQueryFactory.java:13)
at org.mongodb.morphia.DatastoreImpl.newQuery(DatastoreImpl.java:1396)
at org.mongodb.morphia.DatastoreImpl.createQuery(DatastoreImpl.java:155)
at org.mongodb.morphia.DatastoreImpl.find(DatastoreImpl.java:310)
at com.hjc.herol.manager.player.PlayerMgr.createRole(PlayerMgr.java:53)
at com.hjc.herol.core.Router.route(Router.java:97)
at com.hjc.herol.net.http.HttpInHandlerImp.postHandle(HttpInHandlerImp.java:77)
at com.hjc.herol.net.http.HttpInHandlerImp.access$100(HttpInHandlerImp.java:39)
at com.hjc.herol.net.http.HttpInHandlerImp$1.run(HttpInHandlerImp.java:55)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: com.mongodb.client.model.DBCollectionFindOptions
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1945)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1788)
错误很明显指出是不存在某个类。然后我联系到项目是使用maven进行管理的,而且mongo-java-driver也一直在更新而且版本之间的差异都很大,是不是mongo-java-driver的版本和morphia的版本不对应导致。于是我就把mongo-java-driver的版本和morphia的版本都用同一时间发布的版本(都是2016 nov),配置如下
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<version>1.3.0</version>
</dependency>
然后就好了,哈哈,看来我的想法是对。所以有时候针对这些类找不到的错误,有可能是版本的问题,可以通过更新版本来解决。