Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Two versions of module javafx.base in gradle/JavaFX project

My team is working on a java project. (git repo @ https://github.com/RaiderRobotix/Scouting-Client-FX). We are trying to package it using jlink. The following is displayed when running the jlink task (gradlew jlink). I'm using gradle 6.1.1, with jdk 11 on macOS. If you'd like to see our module-info.java, please check the repo. I didn't want to make this question too lengthy.

BTW, I have multiple JDK's on my machine (8,11). Building the project works, but running it with gradlew run does not (I think its an unrelated issue with lombok).

Full error: Error: Two versions of module javafx.base found in ./build/jlinkbase/jlinkjars (Infinite Recharge Client-v4.0.0-alpha.jar and javafx-base-11-mac.jar)

build.gradle

plugins {
    id 'java'
    id 'idea'
    id "org.openjfx.javafxplugin" version "0.0.8"
    id 'org.beryx.jlink' version '2.17.2'
    id "com.github.johnrengelman.shadow" version "5.2.0"
    id 'org.jetbrains.kotlin.jvm' version '1.3.61'
    id 'com.github.gmazzo.buildconfig' version '1.6.2'
}

group = "com.github.RaiderRobotix"
version = "v4.0.0-alpha"

repositories {
    maven { url 'https://jitpack.io' }
    jcenter()
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

jar {
    manifest {
        attributes (
            'Implementation-Title': 'Raider Robotix Scouting Client',
            'Implementation-Version': project.version,
            'Main-Class': 'org.usfirst.frc.team25.scouting.client.ui.Main'
        )
    }
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}


dependencies {
    implementation 'com.github.RaiderRobotix:Scouting-Models:29617b7dcc'
    implementation 'com.github.RaiderRobotix:blue-alliance-api-java-library:3.0.0'

    implementation 'org.projectlombok:lombok:1.18.10'
    annotationProcessor 'org.projectlombok:lombok:1.18.10'

    implementation 'com.google.code.gson:gson:2.+'
    implementation 'commons-io:commons-io:2.+'
    implementation 'org.apache.commons:commons-math3:3.+'

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    implementation "org.jetbrains.kotlin:kotlin-reflect:1.3.61"

}

buildConfig {
    packageName "com.raiderrobotix"
    buildConfigField 'String', 'TBA_API_KEY', project['TBA_API_KEY']
    // The escaped quotes here are NEEDED. The plugin copies the TEXT LITERAL given to it. The quotes are part of this.
    buildConfigField 'String', 'VERSION', "\"$version\""
}

javafx {
    version = "11"
    modules = [
        'javafx.base',
        'javafx.graphics',
        'javafx.controls',
        'javafx.fxml',
    ]
}

jlink {
    launcher {
        name = 'Scouting Client'
    }
}

application {
    mainClassName = 'org.raiderrobotix.scouting.client/org.raiderrobotix.scouting.client.ui.Main'
}

wrapper {
    gradleVersion = '6.1.1'
}

compileKotlin {
    kotlinOptions {
        jvmTarget = "11"
    }
}

compileTestKotlin {
    kotlinOptions {
        jvmTarget = "11"
    }
}
like image 445
Hybras Avatar asked Oct 27 '22 01:10

Hybras


2 Answers

I had a similar issue, my specific error during jlink was:

Error: Two versions of module javafx.base found in C:\Users\tareh\code\cleopetra\build\jlinkbase\jlinkjars (javafx-base-11.0.2-win.jar and javafx-base-11.0.2-linux.jar)

Execution failed for task ':jlink'.

I got some inspiration from https://github.com/openjfx/javafx-gradle-plugin/issues/65 and changed one of my dependencies in build.gradle:

dependencies {
    // Get rid of this
    // compile group: 'org.controlsfx', name: 'controlsfx', version: '11.0.3'

    // Use this instead
    implementation('org.controlsfx:controlsfx:11.0.3') {
        exclude group: 'org.openjfx'
    }
}

After I did that, the jlink error went away, and also I noticed the linux jars which had been listed in my IntelliJ module dependencies had disappeared (I'm on Windows).

This doesn't address your specific problem, but hopefully this will be helpful to others.

like image 143
Tyler Avatar answered Dec 21 '22 14:12

Tyler


In my case I had to comment jar block in build.gradle to perform jlink command. I guess that problem is related to how plugin 'org.beryx.jlink' resolves modules when jar block is appear.

like image 31
Shterneregen Avatar answered Dec 21 '22 14:12

Shterneregen