0

I created a gradle java project in IntelliJ to handle writing and reading JSON objects from file. It contains also 2 costume exception classes. I need this for my libgdx game project for android currently working on.

I encountered the following error when I get to the expected exception in code.

unable to resolve exception class 1498 (Lparohylib/jsonfile/input/JSONFileReaderException;)

I looked over few topics and tips whit this problem but I was unable to find solution so far. I think I could fix this with creating my lib classes in my project but that is not what I want to do unless there is a clean way to import costume jar library (3rd party lib).

What I tried so far:

1) Created a lib folder in core module, copied the jar file and added it trough Project Structure->Core->Dependecies.
2) Right-clicked on the jar file and clicked Add as library
3) Done the same for android module, but there I got some parse error exceptions after gradle sync

Here is the full log:

04-16 22:02:28.808 15451-15480/parohyapp.mario W/dalvikvm: VFY: unable to resolve exception class 1498 (Lparohylib/jsonfile/input/JSONFileReaderException;)
04-16 22:02:28.808 15451-15480/parohyapp.mario W/dalvikvm: VFY: unable to find exception handler at addr 0xa
04-16 22:02:28.808 15451-15480/parohyapp.mario W/dalvikvm: VFY:  rejected Lparohyapp/mario/tools/data/GameProgress;.<init> ()V
04-16 22:02:28.808 15451-15480/parohyapp.mario W/dalvikvm: VFY:  rejecting opcode 0x0d at 0x000a
04-16 22:02:28.808 15451-15480/parohyapp.mario W/dalvikvm: VFY:  rejected Lparohyapp/mario/tools/data/GameProgress;.<init> ()V
04-16 22:02:28.808 15451-15480/parohyapp.mario W/dalvikvm: Verifier rejected class Lparohyapp/mario/tools/data/GameProgress;
04-16 22:02:28.847 15451-15480/parohyapp.mario W/dalvikvm: threadid=11: thread exiting with uncaught exception (group=0x40bd11f8)
04-16 22:02:28.855 15451-15480/parohyapp.mario E/AndroidRuntime: FATAL EXCEPTION: GLThread 26034 java.lang.VerifyError: parohyapp/mario/tools/data/GameProgress
         at parohyapp.mario.GameMaster.<init>(GameMaster.java:57)
         at parohyapp.mario.screens.PlayScreen.<init>(PlayScreen.java:44)
         at parohyapp.mario.screens.ScreenManager.getScreen(ScreenManager.java:36)
         at parohyapp.mario.screens.ScreenManager.setCurrentScreen(ScreenManager.java:28)
         at parohyapp.mario.screens.MenuScreen.changeScreen(MenuScreen.java:112)
         at parohyapp.mario.screens.MenuScreen.access$000(MenuScreen.java:27)
         at parohyapp.mario.screens.MenuScreen$1.changed(MenuScreen.java:99)
         at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeListener.java:28)
         at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:181)
         at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:146)
         at com.badlogic.gdx.scenes.scene2d.ui.Button.setChecked(Button.java:123)
         at com.badlogic.gdx.scenes.scene2d.ui.Button$1.clicked(Button.java:91)
         at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89)
         at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:58)
         at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:353)
         at com.badlogic.gdx.backends.android.AndroidInput.processEvents(AndroidInput.java:379)
         at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:472)
         at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462)
         at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)

4) Reverted all the gradle changes and added it trough the Structure->Core->Dependecies got the following Exception:

FATAL EXCEPTION: GLThread 26106 java.lang.NoClassDefFoundError: parohylib.jsonfile.input.JSONFileReader
    at parohyapp.mario.tools.data.GameProgress.loadData(GameProgress.java:94)
    at parohyapp.mario.tools.data.GameProgress.<init>(GameProgress.java:31)
    at parohyapp.mario.GameMaster.<init>(GameMaster.java:57)
    at parohyapp.mario.screens.PlayScreen.<init>(PlayScreen.java:44)
    at parohyapp.mario.screens.ScreenManager.getScreen(ScreenManager.java:36)
    at parohyapp.mario.screens.ScreenManager.setCurrentScreen(ScreenManager.java:28)
    at parohyapp.mario.screens.MenuScreen.changeScreen(MenuScreen.java:112)
    at parohyapp.mario.screens.MenuScreen.access$000(MenuScreen.java:27)
    at parohyapp.mario.screens.MenuScreen$1.changed(MenuScreen.java:99)
    at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeListener.java:28)
    at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:181)
    at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:146)
    at com.badlogic.gdx.scenes.scene2d.ui.Button.setChecked(Button.java:123)
    at com.badlogic.gdx.scenes.scene2d.ui.Button$1.clicked(Button.java:91)
    at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89)
    at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:58)
    at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:353)
    at com.badlogic.gdx.backends.android.AndroidInput.processEvents(AndroidInput.java:379)
    at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:472)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)

I can provide some more source just ask what you need, not sure what to post here besides what I already did.

EDIT-1: 5) Created a new module from the jar file and added it to graddle build. Got the following error:

Error:com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.parseClass(Main.java:764)
at com.android.dx.command.dexer.Main.access$1500(Main.java:85)
at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)
at com.android.dx.command.dexer.Main.processClass(Main.java:749)
Error:Execution failed for task ':android:transformClassesWithDexForDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_66\bin\java.exe'' finished with non-zero exit value 1
parohy
  • 2,070
  • 2
  • 22
  • 38
  • Have you added `compile fileTree` with path to your jar in gradle.build ? – Enigo Apr 16 '16 at 21:16
  • Ehhh I think yes.. but an example of code what you mean literaly would be great. I tried to compile with fileTree instead of just compile_files but it always throws NoClassDefFoundError. – parohy Apr 23 '16 at 09:58
  • just curious, did you try the solution from my answer? – Enigo Aug 12 '16 at 19:08
  • Here is your answer http://stackoverflow.com/questions/21281734/libgdx-transitive-dependencies-android-java-library-project-jar/40492795#40492795 – resw67 Nov 09 '16 at 21:01

1 Answers1

0

I added tween engine jars to my project like so:

root build.gradle:

project(":core") {
    apply plugin: "java"

    dependencies {
        compile fileTree(dir: '../libs', include: '*.jar')
        compile "com.badlogicgames.gdx:gdx:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-ai:$aiVersion"
        compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
    }
}

project(":android") {
    apply plugin: "android"

    configurations { natives }

    dependencies {
        compile project(":core")
        compile fileTree(dir: '../libs', include: '*.jar')
        compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
        ......
    }
}

where libs is a folder in the root of a project.

And I think I added that jars in Module Settings -> Libraries too.

Enigo
  • 3,685
  • 5
  • 29
  • 54