Problem with import and using SwingFXUtils in gradle project

365 Views Asked by At

I'm very new to gradle and javaFx. I'm working on a gradle project (not mine) and I need to import SwingFXUtils to make some operations. Importing it into the java file:

import javafx.embed.swing.SwingFXUtils;

cause the error: "Cannot resolve symbold SwingFXUtils".

I tried to add it to java-modules.java file

requires javafx.embed.swing; but it is not recognized and I'm having the error message: "Module not found:javafx.embed.swing"

then, I updated my build.gradle for the missing module: like this:

plugins {
    id 'application'
    id 'org.beryx.jlink' version '2.19.0'
    id 'com.google.osdetector' version '1.6.2'
}

repositories {
    flatDir {
        dirs "libs"
    }
    jcenter()
    maven { url "https://maven.geotoolkit.org/" }
    mavenCentral()
}

ext {

    toolName = 'my project'
    toolVersion = '1.0.0'
    mainModuleName = 'com.myproject'
    mainClassName = 'com.myproject.DcTool'
    jfxVersion = '14.0.1'
    pdfboxVersion = '2.0.27'
    platform = osdetector.os == 'osx'?'mac':osdetector.os =='windows'?'win':osdetector.os

    fixWayland = platform == 'mac' ? '' : platform == 'win' ? '' : '-Djdk.gtk.version=2'
}

version = "$toolVersion"

// Project dependencies.
dependencies {
    compileOnly "org.jetbrains:annotations:19.0.0"

    implementation "org.openjfx:javafx-base:$jfxVersion:$platform"
    implementation "org.openjfx:javafx-graphics:$jfxVersion:$platform"
    implementation "org.openjfx:javafx-controls:$jfxVersion:$platform"
    implementation "org.openjfx:javafx-fxml:$jfxVersion:$platform"

    implementation "com.fazecast:jSerialComm:2.6.2"
    implementation "ch.qos.logback:logback-classic:1.3.0-alpha4"
    implementation "de.skuzzle:semantic-version:2.1.0"

    implementation "info.picocli:picocli:4.3.2"
    annotationProcessor "info.picocli:picocli-codegen:4.3.2"

    implementation "org.apache.pdfbox:pdfbox:${pdfboxVersion}"
    implementation "org.apache.pdfbox:preflight:${pdfboxVersion}"
    implementation "com.fasterxml.jackson.jr:jackson-jr-objects:2.11.0"
    implementation group: 'org.openjfx', name: 'javafx-swing', version: '11-ea+24'
}

java {
    modularity.inferModulePath = true
}

application {
    mainModule.set("$mainModuleName")
    mainClass.set("$mainClassName")
    applicationDefaultJvmArgs = [
    "-Dfile.encoding=UTF-8",
    ]
}

tasks.withType(JavaCompile) {
       doFirst {
        options.compilerArgs = [
            '--module-path', classpath.asPath
        ]
        classpath = files()
    }

    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_14
    options.encoding = "UTF-8"

    options.javaModuleVersion.set("$toolVersion")
    options.javaModuleMainClass.set("$mainClassName")
}

run {
    doFirst {
        jvmArgs = [
                "--module-path", classpath.asPath,
                '--patch-module', "$mainModuleName=" + files(sourceSets.main.output.resourcesDir).asPath,
                "--module", "$mainModuleName/$mainClassName"
        ]
        jvmArgs += application.applicationDefaultJvmArgs
        classpath = files()
    }
    doLast {
        args = []
    }
}

jar {
    manifest {
        attributes(
            'Main-Class': "$mainClassName"
        )
    }
}
JAVA_HOME=$(/usr/libexec/java_home)
jlink {
    moduleName.set("$mainModuleName")
    mainClass.set("$mainClassName")

    addOptions(
            '--bind-services',
            '--no-header-files',
            '--no-man-pages',
            '--strip-debug',
            '--compress', '2')

    launcher {
        name = "$toolName"
        jvmArgs += application.applicationDefaultJvmArgs
    }
}

I also tried to download jars of SwingFx and add them in a "libs" folder into the project but I have no result and compiler doesn't find modules I need.

What can I do to make it find this module? Thank you for your help.

0

There are 0 best solutions below