2016-11-04 40 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