Eclipse libGDX project can't resolve gradle dependency of local repo but CLI has no problem?

Viewed 293

I'm trying a libgdx project depending on a lib published in local repo with maven-publish:

// to publish locally:
// ~/gdx-gltf$ ./gradlew gltf:publishToMavenLocal
apply plugin: 'maven-publish'
publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId = 'io.github.odys-z'
            artifactId = 'gdx-gltf'
            version = '0.1.0-SNAPSHOT'
            from components.java
        }
    }
}

When I running the depending desktop with gradlew CLI, it's working:

./gradlew desktop:run

But in eclipse and right click the BasicTweenTest class (gradle project.ext.mainClassName) and run as java application, eclipse reported errors:

com.badlogic.gdx.utils.GdxRuntimeException: java.lang.Error: Unresolved compilation problems: 
    sceneAsset cannot be resolved to a variable
    GLTFLoader cannot be resolved to a type
    SceneModel cannot be resolved to a type
    scenes cannot be resolved or is not a field
    animationLoader cannot be resolved to a variable

The missing type is in the local repo dependency, gdx-gltf-0.1.0-SNAPSHOT. No matter what I cleaned projects or refreshed gradle, the error persisting appear.

Eclipse Screenshot with stacktrace report

desktop/build.gradle:

apply plugin: "java"

sourceCompatibility = 1.8
sourceSets.main.java.srcDirs = [ "src/", "test/" ]
sourceSets.main.resources.srcDirs = ["../android/assets", "test"]

// project.ext.mainClassName = "io.oz.wnw.norm.desktop.DesktopLauncher"
// project.ext.mainClassName = "io.oz.wnw.norm.desktop.PlaneStarTest"
project.ext.mainClassName = "io.oz.wnw.norm.desktop.BasicTweenTest"
project.ext.assetsDir = new File("../android/assets")

task run(dependsOn: classes, type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    ignoreExitValue = true
}

task debug(dependsOn: classes, type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    ignoreExitValue = true
    debug = true
}

task dist(type: Jar) {
    manifest {
        attributes 'Main-Class': project.mainClassName
    }
    from {
        configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    with jar
}

dist.dependsOn classes

The other two tests commented out above can run both in CLI and eclipse, which don't depend on the local published package. Any idea?

--------- parent project/build.gradle ----------

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
        // jcenter()
        google()
    }
    dependencies {
        classpath 'org.wisepersist:gwt-gradle-plugin:1.0.9'
        classpath 'com.android.tools.build:gradle:7.0.0-alpha08'
    }
}

allprojects {

    version = '1.0'
    ext {
        appName = "wn cloud"
        gdxVersion = '1.9.14'
        gltfVersion = '0.1.0-SNAPSHOT'
        roboVMVersion = '2.3.8'
        box2DLightsVersion = '1.4'
        ashleyVersion = '1.7.0'
        aiVersion = '1.8.0'
    }

    repositories {
        mavenLocal()
        maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        mavenCentral()
        // jcenter()
        google()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
        maven { url "https://oss.sonatype.org/content/repositories/releases/" }
    }
}

project(":desktop") {
    apply plugin: "java-library"

    dependencies {
        implementation project(":core")
        api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
        api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
    }
}

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

    configurations { natives }

    dependencies {
        implementation project(":core")
        api "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"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
    }
}

project(":html") {
    apply plugin: "java-library"
    apply plugin: "gwt"
    apply plugin: "war"

    dependencies {
        implementation project(":core")
        api "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion"
        api "com.badlogicgames.gdx:gdx:$gdxVersion:sources"
        api "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion:sources"
        api "com.badlogicgames.ashley:ashley:$ashleyVersion:sources"
    }
}

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

    apply plugin: 'eclipse'

    eclipse {
        classpath {
           downloadSources=true
           downloadJavadoc = true
        }
    }

    dependencies {
        api "com.badlogicgames.gdx:gdx:$gdxVersion"
        api "com.badlogicgames.ashley:ashley:$ashleyVersion"
        api 'io.github.odys-z:gdx-gltf:0.1.0-SNAPSHOT'
    }
}
1 Answers

I faced the same problem. Turns out that LibGDX works with JDK 7 and any version compiled above won't work.

You need to enforce java to compile at version 1.7 before publishing locally

apply plugin: 'java'

sourceCompatibility = 1.7
targetCompatibility = 1.7
Related