2017-02-26 2 views
0

Ich habe eine Zeit lang versucht, warum nach dem Verpacken, um herauszufinden, ich
java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)VScala MongoDB: Verpackung mit sbt Montage nosuchmethod Fehler

(je nachdem, was ich tue, erscheinen andere Fehler, aber sie alle haben zu tun, es scheint, Klassenpfad Probleme)

Ich versuchte zuerst, die aktuellste Version für alle Mongo-Gläser zu bekommen.
versuchte ich crossScalaVersions := Seq("2.10.0","2.10.6", "2.12.1")

Zugabe (bevor ich hatte: scalaVersion := "2.12.1")

Ich versuchte, die Mongo Gläser in den Ordner lib setzen.

Ich stelle sicher, sauber SBT und was dann sbt Montag

Nicht wirklich sicher, zunächst zu versuchen, ich habe für ein paar Stunden googeln um und irgendetwas nicht finden, die noch geholfen. (Ich habe andere Dinge dazwischen versucht, aber ich erinnere mich nicht wirklich, was diese Sachen waren x))

Ich bin offen für die Verwendung von Assembly, ich war einfach nicht sicher, wie Sie diese Gläser ohne es zum Klassenpfad hinzufügen.

build.sbt (root dir.):

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" 
//} 

Quelle des Problems (private val mongoClient = MongoClient() jedes Mal):

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) 
    } 

} 

Wie ich schon sagte, der aktuelle Fehler ist
java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
oder es war auch
java.lang.NoClassDefFoundError: org/mongodb/scala/MongoClient$

Ich nehme an eine Randnotiz die Spigot-Abhängigkeit ist nicht gelöst, wenn unkommentiert, aber das ist keine große Sache, ich habe es einfach in den lib-Ordner. Auch für die plugin.yml -> es macht es nicht wirklich zu der JAR-Datei, aber das ist in Ordnung - ich entzippe es einfach, setze es dort hinein und ziehe es wieder auf.

Anyways irgendwelche Ideen/Lösungen für die Ausnahme (n) würde,

UPDATE :) Dank sehr geschätzt werden: jetzt mit gradle, aber ohne Erfolg leider: 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' 
} 

ich dieses jetzt: .NoSuchMethodError: scala.Predef $ .augmentString (Ljava/lang/String;) Ljava/lang/String

Antwort

0

Es stellt sich die scala-Laufzeitbibliothek I wurde mit scala für Zapfen laden war veraltet

Verwandte Themen