2017-02-26 43 views
0

我一直在努力了一段時間弄清楚爲什麼包裝後,我得到
java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V斯卡拉的MongoDB:與SBT裝配nosuchmethod錯誤包裝

(根據我做什麼,出現其他錯誤,但他們所有這些似乎都是類路徑問題)

我第一次嘗試獲取所有Mongo jar的最新版本。
我嘗試添加 crossScalaVersions := Seq("2.10.0","2.10.6", "2.12.1")

(之前,我有:scalaVersion := "2.12.1"

我試圖把蒙戈罐子lib文件夾中。

我一定要SBT乾淨,然後SBT裝配

不是真的一定要嘗試下什麼,我一直在谷歌上搜索周圍幾個小時,並沒有發現任何幫助呢。 (我試過其他東西,但我不記得那些東西是什麼))

我打開不使用程序集,我只是不確定如何將這些jar添加到沒有它的類路徑。

build.sbt(根目錄):

organization := "com.domain" 

name := "ProjectName" 

version := "0.1.0-SNAPSHOT" 

//scalaVersion := "2.12.1" 
crossScalaVersions := Seq("2.10.0","2.10.6", "2.12.1") 

//retrieveManaged := true 

//resolvers += "spigot-repo" at "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" 

libraryDependencies ++= Seq(
    "org.mongodb.scala" % "mongo-scala-driver_2.12" % "1.2.1", 
    "org.mongodb.scala" % "mongo-scala-bson_2.12" % "1.2.1", 
    "org.mongodb" % "bson" % "3.4.2", 
    "org.mongodb" % "mongodb-driver-core" % "3.4.2", 
    "org.mongodb" % "mongodb-driver-async" % "3.4.2" 
// "org.spigotmc" % "spigot-api" % "1.11.2-R0.1-SNAPSHOT" 
) 

//mappings in (Compile, packageBin) <+= baseDirectory map { base => 
// (base/"in"/"plugin.yml") -> "plugin.yml" 
//} 

問題的來源(private val mongoClient = MongoClient()每次):

package com.domain.project.package.name 

import org.bson.conversions.Bson 
import org.mongodb.scala.MongoClient 

class MongoWrapper { 

    // val mongoClientSettings = MongoClientSettings.builder(). 
    // val mongoDriverInfo = MongoDriverInformation.builder(). 
    // val mongoClient: MongoClient = MongoClients.create(settings, mongoDriverInformation) 
    // private val SERVER = "localhost" 
    // private val PORT = "27017" 
    private val DATABASE_NAME = "dbName" 

    private val mongoClient = MongoClient() //#######ERROR HERE######## 
    val db = mongoClient.getDatabase("dbName") 

    var collections: Map[String, CollectionWrapper] = Map() 

    def linkCollection(collectionWrapper: CollectionWrapper) { 
    collections += collectionWrapper.colName -> collectionWrapper 
    } 

    def queueRead(caller: Any, colIn: String, matcher: Bson, func: Any) { 
    val colOut = collections.get(colIn).get 
    } 

    def queueWrite(caller: Any, colIn: String, data: Bson, func: Any) {  
    val colOut = collections.get(colIn).get 
    colOut.write(caller, data, func) 
    } 

} 

就像我說的,當前錯誤是
java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
或者它也是
java.lang.NoClassDefFoundError: org/mongodb/scala/MongoClient$

我想在一個側面注意到,未註釋時,子插件的依賴性是未解決的,但這不是什麼大問題,我只是把它放在lib文件夾中。另外對於plugin.yml - >它實際上並沒有將它傳遞給jar文件,但這很好 - 我只是解壓縮,放在那裏,然後重新壓縮。

不管怎麼說/到異常(一個或多個)解決方案將不勝感激任何想法,謝謝:)

更新:使用gradle這個現在,但無濟於事遺憾的是:UPDATE

apply plugin: 'java' 
apply plugin: 'scala' 

repositories { 
    jcenter() 
    mavenCentral() 
} 

jar { 
    from { 
     configurations.compile.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
     configurations.runtime.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    } 
} 

dependencies { 

    compile group: 'org.scala-lang', name: 'scala-library', version: '2.12.1' 

    compile files('lib/spigot-api-1.11.2-R0.1-SNAPSHOT-shaded.jar') 

    compile('org.mongodb.scala:mongo-scala-driver_2.11:1.2.1') { 
     exclude group: 'org.scala-lang' 
    } 
} 

buildscript { 
    dependencies { 
     classpath fileTree(dir: 'lib', include: '*.jar') 
    } 
} 

jar { 
    from "plugin.yml" 

    baseName = 'ProjectName' 
    version = '0.1.0-SNAPSHOT' 
} 

我得到這個現在:.NoSuchMethodError:scala.Predef $ .augmentString(Ljava /朗/字符串;)Ljava /朗/字符串

回答

0

原來我是用加載斯卡拉插口斯卡拉運行時庫已經過時