Da melde ich mich auch mal wieder mit einer Frage,
Ich habe ein Libgdx Projekt unter Eclipse zum laufen gekriegt. Jetzt möchte ich gerne mit Kryonet Netzwerkfunktionalität hinzufügen. Getrennt voneinander läuft beides ohne Probleme. Ich kriege Kryonet jedoch nicht in das Libgdx Projekt. Ich habe schon einiges probiert und eine Menge gegooglet, aber anscheinend bin ich der einzige der dieses Problem zu haben scheint.
Das Problem ist, der Kryonet Namespace wird nicht gefunden. Füge ich Kryonet als Projekt im BuildPath hinzu, macht Eclipse erst mal keinen Stress, bis ich dann die Anwendung übersetzen möchte. Es gibt eine Exception die mir mitteilt, dass der Namespace nicht gefunden wurde. Ich habe das Kryonet als Jar exportiert und versucht hinzuzufügen, selbes Problem. Füge ich das Projekt als zip-Archiv, so wie ich es geladen habe hinzu tut sich auch nichts. Im Core Projekt von Libgdx habe ich in der build.gradle versucht die Abhängigkeit hinzuzufügen. Ich muss zugeben, für das externe Projekt ist mir das nicht gelungen, für jars habe ich zumindest schon mal gefunden wie man sie hinzufügt. Ein von mir getestetes Setup:
Kryonet als Lib exportieren, im Core-Projekt einen Ordner libs anlegen, in diesen Ordner die Jar kopieren. Meine build.gradle sieht so aus:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
apply plugin: "java"
dependencies {
compile files('libs/kryonet.jar')
}
sourceCompatibility = 1.6
sourceSets.main.java.srcDirs = [ "src/" ]
eclipse.project {
name = appName + "-core"
}
|
Ich habe es auch mit fileTree('libs') versucht, hilft auch nicht. Bei diesem Setup möchte er zusätzlich einen Classes Ordner haben, gebe ich ihm den, meckert er trotzdem. Ich denke mein Problem ist dass Gradle für mich völlig neu ist. Mich ärgert es schon, dass man darauf angewiesen. Wisst ihr was ich falsch mache? Habt ihr schon selbst Libs unter Gradle Projekten zum laufen gekriegt? Am einfachsten wäre es wenn ich Kryonet einfach als Projekt in die Abhängigkeiten hauen könnte. Bis jetzt habe ich das ganze nur als Desktop Anwendung getestet. Soweit ich gelesen habe macht eine Libgdx Android Anwendung da noch mehr stress, obwohl Kryonet ohne Probleme unter Android laufen sollte.
Hoffentlich könnt ihr helfen.
Liebe Grüße,
Schorsch
edit:
Mir ist aufgefallen dass ich mit der falschen build.gradle gearbeitet habe. Ich habe die ganze Zeit die im Core Projekt bearbeitet. Es gibt noch ein weiteres Projekt ohne Suffix am Ende. Dort sind auch vorher schon viel mehr Informationen als in den anderen gradle.builds.
Dieses Projekt hat nun kryonet als lib im BuildPath. In der build.gradle ist die lib auch angegeben durch:
|
Quellcode
|
1
2
3
4
|
dependencies {
compile files('libs/kryonet-2.18.jar')
compile "com.badlogicgames.gdx:gdx:$gdxVersion"
}
|
Wobei hier die untere Zeile schon vorhanden war. Jetzt gibts einen neuen Fehler. Stehe absolut auf dem Schlauch. Google rückt hier auch nichts mehr raus.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.NoClassDefFoundError: com/esotericsoftware/kryo/io/ByteBufferInputStream
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Caused by: java.lang.NoClassDefFoundError: com/esotericsoftware/kryo/io/ByteBufferInputStream
at com.esotericsoftware.kryonet.Server.<init>(Server.java:90)
at com.esotericsoftware.kryonet.Server.<init>(Server.java:72)
at com.mygdx.game.GameAldan.create(GameAldan.java:18)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
Caused by: java.lang.ClassNotFoundException: com.esotericsoftware.kryo.io.ByteBufferInputStream
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 5 more
|
Ich bin überfragt. Warum findet er die Klassendefinition nicht und was bleibt mir über um das Problem zu lösen? Füge ich die Jar dem BuildPath eines normalen (nicht gradle) Projektes hinzu so macht das ganze keine Probleme. Hoffentlich wisst ihr Hilfe