5

How do I apply the plugin for JavaFX using the Kotlin DSL? The manual suggests:

apply plugin: 'org.openjfx.javafxplugin'

Whereas I'm using the Gradle Kotlin DSL, rather than plain-vanilla Gradle.

Current error:

thufir@dur:~/NetBeansProjects/helloWorldJavaFX$ 
thufir@dur:~/NetBeansProjects/helloWorldJavaFX$ gradle clean

> Configure project :
e: /home/thufir/NetBeansProjects/helloWorldJavaFX/build.gradle.kts:15:5: Unresolved reference: javafxplugin

FAILURE: Build failed with an exception.

* Where:
Build file '/home/thufir/NetBeansProjects/helloWorldJavaFX/build.gradle.kts' line: 15

* What went wrong:
Script compilation error:

  Line 15:     javafxplugin
               ^ Unresolved reference: javafxplugin

1 error

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
thufir@dur:~/NetBeansProjects/helloWorldJavaFX$ 

build file:

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at https://docs.gradle.org/5.0/userguide/tutorial_java_projects.html
 */

plugins {
    // Apply the java plugin to add support for Java
    java

 // org.openjfx.javafxplugin

    javafxplugin

    // Apply the application plugin to add support for building an application
    application
}




//apply plugin: 'org.openjfx.javafxplugin'


repositories {
    // Use jcenter for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

dependencies {
    // This dependency is found on compile classpath of this component and consumers.
   // implementation("com.google.guava:guava:26.0-jre")

    compile (group = "org.openjfx"             , name = "javafx"                     , version = "12.0.1")
    compile (group = "org.openjfx"             , name = "javafx-base"                , version = "12.0.1")
    compile (group = "org.openjfx"             , name = "javafx-controls"            , version = "12.0.1")
    compile (group = "com.google.api-client"   , name = "google-api-client"          , version = "1.29.2")
    compile (group = "com.google.maps"         , name = "google-maps-services"       , version = "0.9.3")
    compile (group = "org.slf4j"               , name = "slf4j-api"                  , version = "1.7.21")
    compile (group = "org.slf4j"               , name = "slf4j-nop"                  , version = "1.8.0-beta4")
    compile (group = "com.google.cloud"        , name = "google-cloud-translate"     , version = "1.77.0")
    compile (group = "com.google.apis"         , name = "google-api-services-books"  , version = "v1-rev106-1.25.0")


   // implementation 'com.google.maps:google-maps-services:(insert latest version)'
   // implementation 'org.slf4j:slf4j-simple:1.7.25'


    // Use TestNG framework, also requires calling test.useTestNG() below
   // testImplementation("org.testng:testng:6.14.3")
}

application {
    // Define the main class for the application
    mainClassName = "net.bounceme.dur.fx.App"
}

val test by tasks.getting(Test::class) {
    // Use TestNG for unit tests
    useTestNG()
}

I'm looking to run the sample from JavaFX.

1 Answer 1

2

The Gradle plugins portal provides examples for declaring the plugin in both Groovy and Kotlin. The README of the GitHub repository also provides examples in each language. Basically, applying the plugin looks like:

plugins {
    application // built-in plugins are declared differently
    id("org.openjfx.javafxplugin") version "0.0.7"
}

Then to add the JavaFX modules you need, you would use:

javafx {
    // will pull in transitive modules
    modules("javafx.controls", "javafx.fxml") // replace with what you modules need

    // another option is to use:
    // modules = listOf("javafx.controls", "javafx.fxml")

    version = "12.0.1" // or whatever version you're using
}

repositories {
    mavenCentral() // I believe jcenter() should work as well
}

The above will pull in the javafx.base, javafx.graphics, javafx.controls, and javafx.fxml modules for the operating system the Gradle daemon is running on. It adds them to the implementation configuration. Don't manually declare any JavaFX dependencies.

Note: The org.openjfx.javafxplugin plugin also applies the com.google.osdetector and org.javamodularity.moduleplugin plugins; at least, it does in version 0.0.7.

The rest of your build file will look something like:

java {
    // replace with the Java version you're using
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

application {
    mainClassName = /* your main class */
}

dependencies {
    // add your other dependencies
}

tasks {
    test {
        useTestNG()
    }
}

A good starting resource for the Kotlin DSL is the Gradle Kotlin DSL Primer page. If you're new to Kotlin, I suggest reading the reference documentation.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.