Wenn ich aus einem gdx-Projekt ein JAR mit Abhängigkeiten von gdx-backend-lwjgl3 und gdx-tools erzeuge und versuche, dieses JAR auszuführen, erhalte ich einen Fehler. Die gdx-Anwendung läuft perfekt mit derselben Konfiguration, wenn ich Gradle verwende, um dies auszuführen.
./gradlew clean dist
java -jar desktop/build/libs/desktop-1.0.jar
1.9.6 mit gdx-backend-lwjgl3 und gdx-tools Abhängigkeiten
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
org/lwjgl/system/Callback.<clinit>()V <strong i="19">@136</strong>: invokestatic
Reason:
Type 'org/lwjgl/PointerBuffer' (current frame, stack[1]) is not assignable to 'org/lwjgl/system/CustomBuffer'
Current Frame:
bci: <strong i="20">@136</strong>
flags: { }
locals: { 'org/lwjgl/system/MemoryStack', null, '[Ljava/lang/Class;', '[Ljava/lang/reflect/Method;', 'org/lwjgl/PointerBuffer' }
stack: { '[Ljava/lang/reflect/Method;', 'org/lwjgl/PointerBuffer' }
Bytecode:
0x0000000: b800 364b 014c 04bd 0037 5903 b200 3853
0x0000010: 4d10 09bd 0039 5903 123a 123b 2cb6 003c
0x0000020: 5359 0412 3d12 3b2c b600 3c53 5905 123e
0x0000030: 123b 2cb6 003c 5359 0612 3f12 3b2c b600
0x0000040: 3c53 5907 1240 123b 2cb6 003c 5359 0812
0x0000050: 4112 3b2c b600 3c53 5910 0612 4212 3b2c
0x0000060: b600 3c53 5910 0712 4312 3b2c b600 3c53
0x0000070: 5910 0812 4412 3b2c b600 3c53 4e2a 2dbe
0x0000080: b600 453a 042d 1904 b800 46b8 0047 5819
0x0000090: 04b6 0048 b300 1e19 04b6 0048 b300 1f19
0x00000a0: 04b6 0048 b300 2019 04b6 0048 b300 2119
0x00000b0: 04b6 0048 b300 2219 04b6 0048 b300 2319
0x00000c0: 04b6 0048 b300 2519 04b6 0048 b300 2619
0x00000d0: 04b6 0048 b300 242a c600 462b c600 132a
0x00000e0: b600 49a7 003b 4d2b 2cb6 004b a700 322a
0x00000f0: b600 49a7 002b 4d2c 4c2c bf3a 052a c600
0x0000100: 1d2b c600 152a b600 49a7 0012 3a06 2b19
0x0000110: 06b6 004b a700 072a b600 4919 05bf a700
0x0000120: 0f4b bb00 1459 124d 2ab7 004e bfb8 004f
0x0000130: 57b1
Exception Handler Table:
bci [223, 227] => handler: 230
bci [6, 215] => handler: 246
bci [6, 215] => handler: 251
bci [261, 265] => handler: 268
bci [246, 253] => handler: 251
bci [0, 286] => handler: 289
Stackmap Table:
full_frame(<strong i="21">@230</strong>,{Object[#149],Object[#150]},{Object[#150]})
same_frame(@239)
same_locals_1_stack_item_frame(<strong i="22">@246</strong>,Object[#150])
same_locals_1_stack_item_frame(<strong i="23">@251</strong>,Object[#150])
full_frame(<strong i="24">@268</strong>,{Object[#149],Object[#150],Top,Top,Top,Object[#150]},{Object[#150]})
same_frame(@279)
same_frame(@283)
full_frame(<strong i="25">@286</strong>,{},{})
same_locals_1_stack_item_frame(<strong i="26">@289</strong>,Object[#151])
same_frame(@301)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.initializeGlfw(Lwjgl3Application.java:78)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:87)
at com.mygdx.lwjgl3.desktop.DesktopLauncher.main(DesktopLauncher.java:10)
Sie können gdx-tools nicht mit dem lwjgl3-Backend auf dist einbinden, diese sind nicht kompatibel. siehe https://github.com/libgdx/libgdx/issues/3726
Tatsächlich hat das gdx-tools-Projekt sowohl Kern-, Editor- als auch Testcode. Editor und Testcode basieren auf dem Lwjgl-Backend. Wenn Sie nur einige Lwjgl-agnostische Klassen benötigen (zum Beispiel Texturpacker), können Sie Lwjgl von der gdx-tools-Abhängigkeit in Ihrem Gradle-Build ausschließen, etwa so (nicht getestet):
compile "com.badlogicgames.gdx:gdx-tools:$gdxVersion" {
exclude "com.badlogicgames.gdx:gdx-backend-lwjgl"
}
siehe https://docs.gradle.org/3.3/userguide/dependency_management.html#sub :exclude_transitive_dependencies
Dies ist nur ein Workaround, IMO gdx-tools sollten irgendwie aufgeteilt werden.
Hoffe, es ist Hilfe.
Dieser Kommentar war ein Glücksfall. Für diejenigen, die dies finden, ist die Syntax ein wenig daneben. Versuchen Sie, Folgendes zu Ihren :desktop
Abhängigkeiten in der Root-Level-Datei build.gradle
hinzuzufügen:
compile ("com.badlogicgames.gdx:gdx-tools:$gdxVersion") {
exclude group: 'com.badlogicgames.gdx', module: 'gdx-backend-lwjgl'
}
Hilfreichster Kommentar
Dieser Kommentar war ein Glücksfall. Für diejenigen, die dies finden, ist die Syntax ein wenig daneben. Versuchen Sie, Folgendes zu Ihren
:desktop
Abhängigkeiten in der Root-Level-Dateibuild.gradle
hinzuzufügen: