2016-11-04 58 views
0

我试图连接到本地MongoDB实例(版本3.2)。我指定的依赖在我的build.gradle像这样:Gradle Java和MongoDB

依赖{编译“org.mongodb:MongoDB的驱动程序:3.3.0”}

我有一个简单App.java文件具有以下代码(见下文)。 build/compileJava步骤都运行良好,没有错误。但是当我运行代码时,我得到:“线程中的异常”main“java.lang.NoClassDefFoundError:com/mongodb/MongoClient at App.main(App.java:9)

我是Java新手。我不确定是否需要下载驱动程序,除了在build.gradle依赖关系列表中引用它,如果是,还需要将它放在哪里。

这是我的src/main/java/App.java:

import com.mongodb.Mongo; 
import com.mongodb.MongoClient; 
import com.mongodb.client.MongoDatabase; 

public class App{ 
     public static void main (String[] args){ 
       System.out.println("Connecting ... "); 
       try { 
         MongoClient client = new MongoClient(); 
       } 
       catch(Exception e) { 
         System.out.println("Failed to connect to MongoDB"); 
       } 

     } 
} 
+0

我用下面的命令来运行应用程序:java -cp build/classes/main App –

+1

您的类路径参数-cp没有指定mongo-driver jar。既然你是java新手,我强烈建议你退后一步,在介绍gradle之前多了解一下classpath。官方文档在这里http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/classpath.html以下也是一个很好的补充:http://enigmastation.com/2014/ 07/11/repost-rocket-java-that-stupid-classpath-thing-you-should-understand/ – whaley

回答

1

那么当您运行应用程序MongoDB的客户端的jar及其依赖添加到类路径。

最简单的方法是从Gradle启动你的应用程序。以下任务添加到您的build.gradle

task run(type: JavaExec) { 
    classpath = sourceSets.main.runtimeClasspath 
    main = 'App' 
} 

然后执行gradle --info run来启动应用程序。我添加了--info参数,以便gradle将日志命令用于启动应用程序。我的机器上显示的命令是:

/usr/lib/jvm/java-8-openjdk/bin/java -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /tmp/App/build/classes/main:/tmp/App/build/resources/main:/home/wg01018/.gradle/caches/modules-2/files-2.1/org.mongodb/mongodb-driver/3.3.0/398df8cc99f36c81344f37401b4284d39f84f6a5/mongodb-driver-3.3.0.jar:/home/wg01018/.gradle/caches/modules-2/files-2.1/org.mongodb/bson/3.3.0/d57b1626e7007a93deb12b2b607e85f6822bf060/bson-3.3.0.jar:/home/wg01018/.gradle/caches/modules-2/files-2.1/org.mongodb/mongodb-driver-core/3.3.0/9af003a316f17323ade866ba5a484a03de6ff025/mongodb-driver-core-3.3.0.jar App 

你看到classpath中包含的MongoDB驱动罐子,但也有一些额外的罐子这是MongoDB的司机罐子的依赖。

gradle dependencies将向您显示这些依赖关系的树。

+0

我是逐字添加的......用gradle运行“run”任务.. ran:“java -cp build/classes /主要应用程序“从我的项目根..相同的结果。我提到我对Gradle/Java完全陌生吗? ..我不确定我是否想以任何方式修改该声明。 –

+0

当你运行'gradle run'时,你发现你的应用程序试图连接到MongoDB吗? –

+0

是的。 ::::::::::::::运行 正在连接... 2016年11月4日3:02:44 com.mongodb.diagnostics.logging.JULLogger日志 信息:使用设置创建的群集{主机= [127.0.0。1:27017],模式= SINGLE,requiredClusterType =未知,serverSelectionTimeout = '30000毫秒',maxWaitQueueSize = 500} BUILD SUCCESSFUL ::::::::::::::::::::: : –

1

最简单的就是使用Gradle application插件。应用插件会自动添加运行的任务,将带自动把在类路径中所有运行时依赖执行指定的主类:

apply plugin: 'application' 

mainClassName = 'App' 

dependencies { 
    compile 'org.mongodb:mongodb-driver:3.3.0' 
} 

repositories { 
    mavenCentral() 
} 

您可以运行应用程序:gradle run