Ich habe eine Zeit lang versucht, warum nach dem Verpacken, um herauszufinden, ich
java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
Scala 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