Giter VIP home page Giter VIP logo

javafx-gradle-plugin's Introduction

JavaFX Gradle Plugin

Simplifies working with JavaFX 11+ for gradle projects.

Gradle Plugin Portal Github Actions BSD-3 license

Getting started

To use the plugin, apply the following two steps:

1. Apply the plugin

Using the plugins DSL:

Groovy

plugins {
    id 'org.openjfx.javafxplugin' version '0.1.0'
}

Kotlin

plugins {
    id("org.openjfx.javafxplugin") version "0.1.0"
}
Alternatively, you can use the buildscript DSL:

Groovy

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath 'org.openjfx:javafx-plugin:0.1.0'
    }
}
apply plugin: 'org.openjfx.javafxplugin'

Kotlin

buildscript {
    repositories {
        maven {
            setUrl("https://plugins.gradle.org/m2/")
        }
    }
    dependencies {
        classpath("org.openjfx:javafx-plugin:0.1.0")
    }
}
apply(plugin = "org.openjfx.javafxplugin")

2. Specify JavaFX modules

Specify all the JavaFX modules that your project uses:

Groovy

javafx {
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

Kotlin

javafx {
    modules("javafx.controls", "javafx.fxml")
}

3. Specify JavaFX version

To override the default JavaFX version, a version string can be declared. This will make sure that all the modules belong to this specific version:

Groovy


javafx {
    version = '17'
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

Kotlin


javafx {
    version = "17"
    modules("javafx.controls", "javafx.fxml")
}

4. Cross-platform projects and libraries

The plugin will include JavaFX dependencies for the current platform. However, a different target platform can also be specified.

Supported targets are:

  • linux
  • linux-aarch64
  • win or windows
  • osx or mac or macos
  • osx-aarch64 or mac-aarch64 or macos-aarch64 (support added in JavaFX 11.0.12 LTS and JavaFX 17 GA)

Groovy


javafx {
    modules = [ 'javafx.controls', 'javafx.fxml' ]
    platform = 'mac'
}

Kotlin


javafx {
    modules("javafx.controls", "javafx.fxml")
    platform = 'mac'
}

5. Dependency scope

JavaFX application require native binaries for each platform to run. By default, the plugin will include these binaries for the target platform. Native dependencies can be avoided by declaring the dependency configuration as compileOnly.

Groovy


javafx {
    modules = [ 'javafx.controls', 'javafx.fxml' ] 
    configuration = 'compileOnly'
}

Kotlin


javafx {
    modules("javafx.controls", "javafx.fxml")
    configuration = "compileOnly"
}

Multiple configurations can also be targeted by using configurations. For example, JavaFX dependencies can be added to both implementation and testImplementation.

Groovy


javafx {
    modules = [ 'javafx.controls', 'javafx.fxml' ]
    configurations = [ 'implementation', 'testImplementation' ]
}

Kotlin


javafx {
    modules("javafx.controls", "javafx.fxml")
    configurations("implementation", "testImplementation")
}

5. Using a local JavaFX SDK

By default, JavaFX modules are retrieved from Maven Central. However, a local JavaFX SDK can be used instead, for instance in the case of a custom build of OpenJFX.

Setting a valid path to the local JavaFX SDK will take precedence:

Groovy


javafx {
    sdk = '/path/to/javafx-sdk'
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

Kotlin


javafx {
    sdk = "/path/to/javafx-sdk"
    modules("javafx.controls", "javafx.fxml")
}

Issues and Contributions

Issues can be reported to the Issue tracker.

Contributions can be submitted via Pull requests, providing you have signed the Gluon Individual Contributor License Agreement (CLA).

Migrating from 0.0.14 to 0.1.0

Version 0.1.0 introduced several changes and improvements, including lazy dependency declaration, variant-aware dependency management, and support for Gradle's built-in JPMS functionality. In the previous version, the classpath/module path was rewritten. This is no longer the case. As a result, your past builds might be affected when you upgrade the plugin. In the next section, there are a few troubleshooting steps that might help with the transition if you encounter issues when upgrading. These examples are provided on a best-effort basis, but feel free to open an issue if you believe there's a migration scenario not covered here that should be included.

Troubleshooting

Gradle version

The plugin now requires Gradle 6.1 or higher. Consider updating your Gradle settings, wrapper, and build to a more recent version of Gradle. Additionally, updating your plugins and dependencies can help minimize issues with the plugin.

Mixed JavaFX jars

If you encounter mixed classified JavaFX jars or see errors like Error initializing QuantumRenderer: no suitable pipeline found during executing task like build, test, assemble, etc., it is likely one or more of your dependencies have published metadata that includes JavaFX dependencies with classifiers. The ideal solution is to reach out to library authors to update their JavaFX plugin and publish a patch with fixed metadata. A fallback solution to this is to exclude group: 'org.openjfx' on the dependencies causing the issue.

implementation('com.example.fx:foo:1.0.0') {
    exclude group: 'org.openjfx', module: '*'
}

Variants

If you encounter errors such as Cannot choose between the following variants of org.openjfx... it is possible that your build or another plugin is interacting with the classpath/module path in a way that "breaks" functionality provided by this plugin. In such cases, you may need to re-declare the variants yourself as described in Gradle docs on attribute matching/variants or reach out to the plugin author in an attempt to remediate the situation.

// Approach 1: Explicit Variant
// The following snippet will let you add attributes for linux and x86_64 to a configuration
configurations.someConfiguration {
    attributes {
        attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME))
        attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named(OperatingSystemFamily, "linux"))
        attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(MachineArchitecture, "x86-64"))
    }
}

// Approach 2: Copy existing configuration into another configuration
configurations.someConfiguration  {
    def runtimeAttributes = configurations.runtimeClasspath.attributes
    runtimeAttributes.keySet().each { key ->
        attributes.attribute(key, runtimeAttributes.getAttribute(key))
    }
}

Extra plugins

In versions 0.0.14 and below, there was a transitive dependency on org.javamodularity.moduleplugin. If your modular project stops working after updating to 0.1.0 or above, it is likely that you need to explicitly add the org.javamodularity.moduleplugin back to your build and set java.modularity.inferModulePath.set(false) to keep things working as they were. This plugin helped with transitive dependencies on legacy jars that haven't been modularized yet, but now you have to option choose which approach to take. This change should not be required for non-modular projects.

Before

plugins {
    id 'org.openjfx.javafxplugin' version '0.0.14'
}

After

plugins {
    id 'org.openjfx.javafxplugin' version '0.1.0'
    id 'org.javamodularity.moduleplugin' version '1.8.12'
}

java {
    modularity.inferModulePath.set(false)
}

Note: There are other recommended alternatives over org.javamodularity.moduleplugin for modular projects such as extra-java-module-info that would allow you to keep inferModulePath set to true by declaring missing module information from legacy jars. More details on how to accomplish can be found on the plugin's source code repository.

Dependency hierarchy

Version 0.1.0 now relies on JavaFX modules defining their transitive modules rather than flattening them. This change allows you to publish metadata declaring only the JavaFX modules you need, meaning it does not include transitive JavaFX modules as part of your published metadata.

Some plugins rely on having all modules (transitive included) declared as "top-level" modules such as the badass-runtime-plugin on non-modular projects. In this particular case, it is necessary to declare all modules to restore previous functionality from 0.0.14 and below.

Before

javafx {
    modules = ['javafx.controls']
}

After

javafx {
    modules = ['javafx.base', 'javafx.graphics', 'javafx.controls']
}

javafx-gradle-plugin's People

Contributors

aalmiray avatar abhinayagarwal avatar bingo-tango avatar eugener avatar floriankirmaier avatar gluon-bot avatar henryhchchc avatar jan5366x avatar jjohannes avatar johanvos avatar jperedadnr avatar koppor avatar lenborje avatar mariusvolkhart avatar nxllpointer avatar samypr100 avatar siordache avatar tiainen avatar yuliu2016 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

javafx-gradle-plugin's Issues

Allow local JavaFX SDK

In some occasions, it can be necessary using a local JavaFX SDK instead of the published artifacts from Maven Central, for instance when testing a local build of OpenJFX.

Project with transitive dependency on newer version of JavaFX fails

Consider a scenario where a project with javafx-gradle-plugin is trying to use version 11 for JavaFX modules and it also has a dependency on ControlsFX 11.0.2.

javafx {
    version = "11"
    modules = [ 'javafx.controls' ]
}

dependencies {
      compile 'org.controlsfx:controlsfx:11.0.1'
}

In this case the project will fail to run. ControlsFX introduces a transitive dependency to JavaFX 11.0.2 and since classpath always uses the latest version, the plugin fails to find JavaFX modules with version 11 on the classpath.

This can be fixed by doing a version-less comparison while adding JavaFX modules to module-path from the classpath.

Expose the resolved platform

The value of the resolved platform may be of use to other tasks. Please consider exposing it using the extra properties container, for example

detectPlatform(project);
project.ext.platform = platform

IntelliJ can't start app when using the IDE build system

Gradle is rather slow. So it can be preferable to use the IntelliJ build and run system when possible, which is better integrated and less visually noisy. Unfortunately this doesn't work when using the Gradle build system - I get this exception which suggests some module system problem:

Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x182efd96) cannot access class com.sun.javafx.scene.layout.RegionHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module @0x182efd96
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at javafx.scene.control.Control.<clinit>(Control.java:86)

The command used to start the app is

/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/bin/java --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED "-javaagent:/Users/mike/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-1/193.5233.12/IntelliJ IDEA 2019.3 EAP.app/Contents/lib/idea_rt.jar=53771:/Users/mike/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-1/193.5233.12/IntelliJ IDEA 2019.3 EAP.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/mike/Source/Interruptions/build/classes/kotlin/main:/Users/mike/Source/Interruptions/build/resources/main:/Users/mike/.gradle/caches/modules-2/files-2.1/com.sandec.jpro/jpro-webapi/2019.1.2/69a3efb9531949d325e385bb0867ae4d576b2824/jpro-webapi-2019.1.2.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/no.tornado/tornadofx/1.7.19/fdd74beea0e573461c6657f5937eb3f47a739c52/tornadofx-1.7.19.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.3.50/bf65725d4ae2cf00010d84e945fcbc201f590e11/kotlin-stdlib-jdk8-1.3.50.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/io.permazen/permazen-main/4.1.5/104398bde5f53046c2f46b9ca5188a49001a0670/permazen-main-4.1.5.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/io.permazen/permazen-kv-array/4.1.5/75a38a92956610a2c04f41f76dacd72b141d3935/permazen-kv-array-4.1.5.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-fxml/12.0.1/975a83878e6687dbf3fdb35592baa2586b658c8b/javafx-fxml-12.0.1-mac.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-controls/12.0.1/af23299415c0d594ea9f84b3dd3baf9b54618594/javafx-controls-12.0.1-mac.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-controls/12.0.1/a6502999bdb947885c8d121a47d745d52a06577a/javafx-controls-12.0.1.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/12.0.1/ed0b71c64a58482f659194ab087b7eeda0fc562d/javafx-graphics-12.0.1-mac.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/12.0.1/19ec56a15d7dd9c49112912547425b718485d7db/javafx-graphics-12.0.1.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-base/12.0.1/b995ca9beeb01fcddd062c54a24ff4f6aa3b2a37/javafx-base-12.0.1-mac.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-base/12.0.1/6abae81d00e0c6f4fde02e2666f9c0b989ff47e4/javafx-base-12.0.1.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.50/50ad05ea1c2595fb31b800e76db464d08d599af3/kotlin-stdlib-jdk7-1.3.50.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.3.20/cd49eec32cf964333faf59e04b4085eac7008477/kotlin-reflect-1.3.20.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.50/b529d1738c7e98bbfa36a4134039528f2ce78ebf/kotlin-stdlib-1.3.50.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.glassfish/javax.json/1.1.2/a507518970d55e9de24665af06d70aae91b4aaa1/javax.json-1.1.2.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/io.permazen/permazen-coreapi/4.1.5/10ec9e6430cc882c714b68073c89d1d05d10bc8a/permazen-coreapi-4.1.5.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/io.permazen/permazen-kv-simple/4.1.5/4118955d530796a0dc7b9b3aabbe5fe90a858321/permazen-kv-simple-4.1.5.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/io.permazen/permazen-kv/4.1.5/a1ead8b1282f68e4cd3f2f4add0fcf56b839f2dc/permazen-kv-4.1.5.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/io.permazen/permazen-util/4.1.5/464b9ca98b60a63690d822c0f0866583665edaad/permazen-util-4.1.5.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.dellroad/dellroad-stuff-main/2.2.2/e67634b710df0babff10a293beab63294b40ad84/dellroad-stuff-main-2.2.2.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/24.0-jre/41ac1e74d6b4e1ea1f027139cffeb536c732a81/guava-24.0-jre.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.hibernate.validator/hibernate-validator/6.0.7.Final/8b9d9c7ec8c73963ea0fe81912fc67711a4ef76/hibernate-validator-6.0.7.Final.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/javax.validation/validation-api/2.0.1.Final/cb855558e6271b1b32e716d24cb85c7f583ce09e/validation-api-2.0.1.Final.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.glassfish/javax.el/3.0.1-b09/2b59f1809e193aa942b8ed20efc673d9063e6a50/javax.el-3.0.1-b09.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.25/da76ca59f6a57ee3102f8f9bd9cee742973efa8a/slf4j-api-1.7.25.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.50/3d9cd3e1bc7b92e95f43d45be3bfbcf38e36ab87/kotlin-stdlib-common-1.3.50.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/javax.json/javax.json-api/1.1.2/b38c52a6e180359108bd5e35dbeec7d1be45c535/javax.json-api-1.1.2.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-log4j12/1.7.25/110cefe2df103412849d72ef7a67e4e91e4266b4/slf4j-log4j12-1.7.25.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.11/3acb4705652e16236558f0f4f2192cc33c3bd189/commons-codec-1.11.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/1.3.9/40719ea6961c0cb6afaeb6a921eaa1f6afd4cfdf/jsr305-1.3.9.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/log4j/log4j/1.2.17/5af35056b4d257e4b64b9e8069c0746e8b08629f/log4j-1.2.17.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-compat-qual/2.0.0/fc89b03860d11d6213d0154a62bcd1c2f69b9efa/checker-compat-qual-2.0.0.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.1.3/39b109f2cd352b2d71b52a3b5a1a9850e1dc304b/error_prone_annotations-2.1.3.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.1/ed28ded51a8b1c6b112568def5f4b455e6809019/j2objc-annotations-1.1.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.codehaus.mojo/animal-sniffer-annotations/1.14/775b7e22fb10026eed3f86e8dc556dfafe35f2d5/animal-sniffer-annotations-1.14.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.jboss.logging/jboss-logging/3.3.0.Final/3616bb87707910296e2c195dc016287080bba5af/jboss-logging-3.3.0.Final.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/com.fasterxml/classmate/1.3.1/2ad2fd09dcf5607ca96f8ef432096a96986c40a/classmate-1.3.1.jar -p /Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-base/12.0.1/b995ca9beeb01fcddd062c54a24ff4f6aa3b2a37/javafx-base-12.0.1-mac.jar:/Users/mike/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/12.0.1/ed0b71c64a58482f659194ab087b7eeda0fc562d/javafx-graphics-12.0.1-mac.jar net.plan99.interruptions.Interruptions

It does work when started with Gradle so I'd understand if you considered this not a bug, but still ... it used to all be so easy :(

Error in Intellij

I started a small JavaFx app with the build.grade like here

Still, when I want to execute the main class I get:
java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x117c7d50) cannot access class com.sun.javafx.scene.layout.RegionHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module @0x117c7d50

Project is set to use OpenJDK11, Gradle 6.5.
Do you know any way to fix this ?

plugins {
    id 'application'
    id 'org.openjfx.javafxplugin' version '8.8.2'
}

repositories {
    mavenCentral()
}

javafx {
    version = "14"
    modules = [ 'javafx.controls', 'javafx.graphics' ]
}

mainClassName = 'CustomTextAreaApp'

NPE in case of wrong module names

If one enters wrong JavaFX module names, he gets NPE. I think that plugin should evaluate this exception. Even better to use enum instead.

property 'destinationDirectory' is final and cannot be changed

I created a project using gradle 6.3, kotlin 1.14 and jdk 14.
After I added module-info.java to the project, I got the following error:

ไธ‹ๅˆ5:52:45: Executing task 'run'...


> Configure project :
Found module name 'jfxdemo'

> Task :compileKotlin
> Task :compileJava FAILED
2 actionable tasks: 2 executed

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> The value for task ':compileJava' property 'destinationDirectory' is final and cannot be changed any further.

* 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 564ms
ไธ‹ๅˆ5:52:46: Task execution finished 'run'.

has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

But I used openJDK 11.0.2 .

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

group 'com.fx.similar'
version '1.0-SNAPSHOT'


repositories {
    mavenCentral()
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}
mainClassName = 'com.fx.app.App'
javafx {
    version = "12"
    modules = [ 'javafx.controls', 'javafx.fxml','javafx.base','javafx.graphics' ]
}

A strange behavior

Hello,
To begin I must say that this plugin greatly simplified my life. Thank you so much.
But there is a detail that I do not understand, which is perfectly contournable and that I go back only for information.
If I run a JavaFX window following the most basic "Hello world" example, I get an error:
Error: JavaFX runtime components are missing, and are required to run this application

The build.gradle source :

plugins {
  	id 'org.openjfx.javafxplugin' version '0.0.8'
}

repositories {
    jcenter()
}

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

The java source :

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TestWin extends Application {
    
	@Override
	public void start(Stage primaryStage) {
        
		 StackPane root = new StackPane();
		 Scene scene = new Scene(root, 300, 250);

		 primaryStage.setTitle("Hello World!");
		 primaryStage.setScene(scene);
		 primaryStage.show();
	}
	 public static void main(String[] args) {
		 launch(args);
	 }
}

But if I call the same code with an indirection then I get a JavaFX window instead of the error.

The java sources :

public class TestWin {
	 public static void main(String[] args) {
		 TestWinImpl.inition(args);
	 }
}

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TestWinImpl extends Application {
	@Override
	public void start(Stage primaryStage) {
		
		StackPane root = new StackPane();
		Scene scene = new Scene(root, 300, 250);
		
		primaryStage.setTitle("Hello World!");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	public static void inition(String[] args) {
		launch(args);
	}
}

I use OpenJDK-11 on Mac OS.

Please add source code comments explaining why the code does what it does.

Please add comments in the plugin source code explaining WHAT each function or block of code is intending to accomplish and WHY doing that is necessary or useful (i.e. what would happen if the plugin didn't do that).

It is difficult to determine whether the plugin's behavior is correct or complete without knowing what the goals of the code are intended to be.

Build failed with an exception

Can't install this plugin jdk13. WIndows 10x64 IntellijIDEA Community 2019.
Create new project with gradle.
Project structure
Screenshot_12
build.gradle
`plugins {
id 'java'
id "org.openjfx.javafxplugin" version "0.0.8"
}

group 'net.nixwins'
version '1.0-SNAPSHOT'

sourceCompatibility = '13'

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
`

When i add id "org.openjfx.javafxplugin" version "0.0.8" get error.

FAILURE: Build failed with an exception.

  • Where:
    Build file 'E:\prj\school\someprj\build.gradle' line: 3

  • What went wrong:
    Plugin [id: 'org.openjfx.javafxplugin', version: '0.0.8'] was not found in any of the following sources:

  • Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
  • Plugin Repositories (could not resolve plugin artifact 'org.openjfx.javafxplugin:org.openjfx.javafxplugin.gradle.plugin:0.0.8')
    Searched in the following repositories:
    Gradle Central Plugin Repository
  • 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

CONFIGURE FAILED in 0s

Try run with --stacktrace

FAILURE: Build failed with an exception.

  • Where:
    Build file 'E:\prj\school\someprj\build.gradle' line: 3

  • What went wrong:
    Plugin [id: 'org.openjfx.javafxplugin', version: '0.0.8'] was not found in any of the following sources:

  • Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
  • Plugin Repositories (could not resolve plugin artifact 'org.openjfx.javafxplugin:org.openjfx.javafxplugin.gradle.plugin:0.0.8')
    Searched in the following repositories:
    Gradle Central Plugin Repository
  • Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Exception is:
    org.gradle.api.plugins.UnknownPluginException: Plugin [id: 'org.openjfx.javafxplugin', version: '0.0.8'] was not found in any of the following sources:

  • Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
  • Plugin Repositories (could not resolve plugin artifact 'org.openjfx.javafxplugin:org.openjfx.javafxplugin.gradle.plugin:0.0.8')
    Searched in the following repositories:
    Gradle Central Plugin Repository
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.resolveToFoundResult(DefaultPluginRequestApplicator.java:262)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.access$100(DefaultPluginRequestApplicator.java:63)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator$1.transform(DefaultPluginRequestApplicator.java:91)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator$1.transform(DefaultPluginRequestApplicator.java:88)
    at org.gradle.util.CollectionUtils.collect(CollectionUtils.java:205)
    at org.gradle.util.CollectionUtils.collect(CollectionUtils.java:200)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:88)
    at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:186)
    at org.gradle.configuration.BuildOperationScriptPlugin$1$1.run(BuildOperationScriptPlugin.java:69)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:66)
    at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:63)
    at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
    at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:63)
    at org.gradle.configuration.project.BuildScriptProcessor$1.run(BuildScriptProcessor.java:44)
    at org.gradle.internal.Factories$1.create(Factories.java:25)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:200)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:186)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:41)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
    at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:106)
    at org.gradle.internal.Factories$1.create(Factories.java:25)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
    at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:226)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:220)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:186)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:95)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:67)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:695)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:143)
    at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
    at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:60)
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:41)
    at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:302)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:210)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
    at org.gradle.initialization.DefaultGradleLauncher.getConfiguredBuild(DefaultGradleLauncher.java:129)
    at org.gradle.internal.invocation.GradleBuildController$2.execute(GradleBuildController.java:67)
    at org.gradle.internal.invocation.GradleBuildController$2.execute(GradleBuildController.java:64)
    at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:82)
    at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:75)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
    at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
    at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:75)
    at org.gradle.internal.invocation.GradleBuildController.configure(GradleBuildController.java:64)
    at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:62)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:58)
    at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
    at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:49)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:46)
    at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:46)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
    at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
    at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)

CONFIGURE FAILED in 0s

--debug

15:52:56.155 [INFO] [org.gradle.launcher.daemon.server.exec.LogToClient] The client will now receive all logging from the daemon (pid: 10076). The daemon log file: C:\Users\admin.gradle\daemon\5.2.1\daemon-10076.out.log
15:52:56.158 [INFO] [org.gradle.launcher.daemon.server.exec.LogAndCheckHealth] Starting 25th build in daemon [uptime: 31 mins 55.169 secs, performance: 100%]
15:52:56.159 [DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] The daemon has started executing the build.
15:52:56.159 [DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] Executing build with daemon context: DefaultDaemonContext[uid=f98190ed-c5cf-4737-8eec-bbc9af1423ac,javaHome=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.2.3\jbr,daemonRegistryDir=C:\Users\admin.gradle\daemon,pid=10076,idleTimeout=10800000,priority=NORMAL,daemonOpts=--add-opens,java.base/java.util=ALL-UNNAMED,--add-opens,java.base/java.lang=ALL-UNNAMED,--add-opens,java.base/java.lang.invoke=ALL-UNNAMED,--add-opens,java.prefs/java.util.prefs=ALL-UNNAMED,-XX:MaxMetaspaceSize=256m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx512m,-Dfile.encoding=windows-1251,-Duser.country=RU,-Duser.language=ru,-Duser.variant]
15:52:56.160 [INFO] [org.gradle.internal.work.DefaultWorkerLeaseService] Using 2 worker leases.
15:52:56.165 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] Creating new cache for fileHashes, path E:\prj\school\someprj.gradle\5.2.1\fileHashes\fileHashes.bin, access org.gradle.cache.internal.DefaultCacheAccess@1a33c3b7
15:52:56.165 [DEBUG] [org.gradle.cache.internal.LockOnDemandCrossProcessCacheAccess] Acquiring file lock for file hash cache (E:\prj\school\someprj.gradle\5.2.1\fileHashes)
15:52:56.165 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on file hash cache (E:\prj\school\someprj.gradle\5.2.1\fileHashes).
15:52:56.174 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on file hash cache (E:\prj\school\someprj.gradle\5.2.1\fileHashes).
15:52:56.178 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.182 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Run build' started
15:52:56.196 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1 started (1 worker(s) in use).
15:52:56.196 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Daemon worker Thread 7: acquired lock on root.1
15:52:56.196 [INFO] [org.gradle.internal.buildevents.BuildLogger] Starting Build
15:52:56.196 [DEBUG] [org.gradle.internal.buildevents.BuildLogger] Gradle user home: C:\Users\admin.gradle
15:52:56.196 [DEBUG] [org.gradle.internal.buildevents.BuildLogger] Current dir: E:\prj\school\someprj
15:52:56.196 [DEBUG] [org.gradle.internal.buildevents.BuildLogger] Settings file: null
15:52:56.196 [DEBUG] [org.gradle.internal.buildevents.BuildLogger] Build file: null
15:52:56.196 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.202 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Load build' started
15:52:56.203 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.203 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Run init scripts' started
15:52:56.204 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.204 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply script ijinit.gradle to build' started
15:52:56.212 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] Creating new cache for workingDirs, path E:\prj\school\someprj.gradle\5.2.1\vcsMetadata-1\workingDirs.bin, access org.gradle.cache.internal.DefaultCacheAccess@3f69a5c3
15:52:56.278 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] Creating new cache for md-supplier, path C:\Users\admin.gradle\caches\5.2.1\md-supplier\md-supplier.bin, access org.gradle.cache.internal.DefaultCacheAccess@181b22d
15:52:56.279 [DEBUG] [org.gradle.cache.internal.LockOnDemandCrossProcessCacheAccess] Acquiring file lock for cache directory md-supplier (C:\Users\admin.gradle\caches\5.2.1\md-supplier)
15:52:56.279 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on cache directory md-supplier (C:\Users\admin.gradle\caches\5.2.1\md-supplier).
15:52:56.286 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on cache directory md-supplier (C:\Users\admin.gradle\caches\5.2.1\md-supplier).
15:52:56.287 [DEBUG] [org.gradle.api.internal.artifacts.mvnsettings.DefaultLocalMavenRepositoryLocator] No local repository in Settings file defined. Using default path: C:\Users\admin.m2\repository
15:52:56.293 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] Creating new cache for md-rule, path C:\Users\admin.gradle\caches\5.2.1\md-rule\md-rule.bin, access org.gradle.cache.internal.DefaultCacheAccess@8ccc2fc
15:52:56.294 [DEBUG] [org.gradle.cache.internal.LockOnDemandCrossProcessCacheAccess] Acquiring file lock for cache directory md-rule (C:\Users\admin.gradle\caches\5.2.1\md-rule)
15:52:56.294 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on cache directory md-rule (C:\Users\admin.gradle\caches\5.2.1\md-rule).
15:52:56.299 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on cache directory md-rule (C:\Users\admin.gradle\caches\5.2.1\md-rule).
15:52:56.301 [DEBUG] [org.gradle.internal.locking.LockFileReaderWriter] Lockfiles root: null
15:52:56.303 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.303 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve dependencies of classpath' started
15:52:56.331 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver] Resolving configuration 'classpath'
15:52:56.332 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder] Visiting configuration unspecified:unspecified:unspecified(classpath).
15:52:56.336 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder] Flushing resolved configuration data in Binary store in C:\Users\admin\AppData\Local\Temp\gradle13799229078254788958.bin. Wrote root 2.
15:52:56.350 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Resolve dependencies of classpath'
15:52:56.351 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.351 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve dependencies of classpath' completed
15:52:56.351 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.352 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of classpath' started
15:52:56.356 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match kapt3-idea.jar from candidates [kapt3-idea.jar] for {org.gradle.usage=java-runtime}
15:52:56.356 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match external-system-rt.jar from candidates [external-system-rt.jar] for {org.gradle.usage=java-runtime}
15:52:56.356 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match kotlin-gradle-tooling.jar from candidates [kotlin-gradle-tooling.jar] for {org.gradle.usage=java-runtime}
15:52:56.356 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match groovy-all-2.4.17.jar from candidates [groovy-all-2.4.17.jar] for {org.gradle.usage=java-runtime}
15:52:56.356 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match ion-java-1.5.0-1.jar from candidates [ion-java-1.5.0-1.jar] for {org.gradle.usage=java-runtime}
15:52:56.356 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match kotlin-stdlib-1.3.31.jar from candidates [kotlin-stdlib-1.3.31.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match gradle-tooling-extension-api.jar from candidates [gradle-tooling-extension-api.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match gradle-tooling-extension-impl.jar from candidates [gradle-tooling-extension-impl.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match util.jar from candidates [util.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match noarg-ide-plugin.jar from candidates [noarg-ide-plugin.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match sam-with-receiver-ide-plugin.jar from candidates [sam-with-receiver-ide-plugin.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match gson-2.8.5.jar from candidates [gson-2.8.5.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match gradle-api-impldep-5.2.1-sp1.jar from candidates [gradle-api-impldep-5.2.1-sp1.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match trove4j.jar from candidates [trove4j.jar] for {org.gradle.usage=java-runtime}
15:52:56.357 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match kotlin-plugin.jar from candidates [kotlin-plugin.jar] for {org.gradle.usage=java-runtime}
15:52:56.358 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match allopen-ide-plugin.jar from candidates [allopen-ide-plugin.jar] for {org.gradle.usage=java-runtime}
15:52:56.358 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Resolve files of classpath'
15:52:56.358 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.358 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of classpath' completed
15:52:56.358 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.359 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of classpath' started
15:52:56.359 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match kapt3-idea.jar from candidates [kapt3-idea.jar] for {org.gradle.usage=java-runtime}
15:52:56.359 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match external-system-rt.jar from candidates [external-system-rt.jar] for {org.gradle.usage=java-runtime}
15:52:56.359 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match kotlin-gradle-tooling.jar from candidates [kotlin-gradle-tooling.jar] for {org.gradle.usage=java-runtime}
15:52:56.360 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match groovy-all-2.4.17.jar from candidates [groovy-all-2.4.17.jar] for {org.gradle.usage=java-runtime}
15:52:56.360 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match ion-java-1.5.0-1.jar from candidates [ion-java-1.5.0-1.jar] for {org.gradle.usage=java-runtime}
15:52:56.365 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match kotlin-stdlib-1.3.31.jar from candidates [kotlin-stdlib-1.3.31.jar] for {org.gradle.usage=java-runtime}
15:52:56.365 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match gradle-tooling-extension-api.jar from candidates [gradle-tooling-extension-api.jar] for {org.gradle.usage=java-runtime}
15:52:56.366 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match gradle-tooling-extension-impl.jar from candidates [gradle-tooling-extension-impl.jar] for {org.gradle.usage=java-runtime}
15:52:56.366 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match util.jar from candidates [util.jar] for {org.gradle.usage=java-runtime}
15:52:56.366 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match noarg-ide-plugin.jar from candidates [noarg-ide-plugin.jar] for {org.gradle.usage=java-runtime}
15:52:56.366 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match sam-with-receiver-ide-plugin.jar from candidates [sam-with-receiver-ide-plugin.jar] for {org.gradle.usage=java-runtime}
15:52:56.366 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match gson-2.8.5.jar from candidates [gson-2.8.5.jar] for {org.gradle.usage=java-runtime}
15:52:56.367 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match gradle-api-impldep-5.2.1-sp1.jar from candidates [gradle-api-impldep-5.2.1-sp1.jar] for {org.gradle.usage=java-runtime}
15:52:56.367 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match trove4j.jar from candidates [trove4j.jar] for {org.gradle.usage=java-runtime}
15:52:56.367 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match kotlin-plugin.jar from candidates [kotlin-plugin.jar] for {org.gradle.usage=java-runtime}
15:52:56.367 [DEBUG] [org.gradle.internal.component.model.ComponentAttributeMatcher] Selected match allopen-ide-plugin.jar from candidates [allopen-ide-plugin.jar] for {org.gradle.usage=java-runtime}
15:52:56.367 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Resolve files of classpath'
15:52:56.367 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.368 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of classpath' completed
15:52:56.536 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.536 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply plugin JetGradlePlugin to build' started
15:52:56.540 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Apply plugin JetGradlePlugin to build'
15:52:56.540 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.540 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply plugin JetGradlePlugin to build' completed
15:52:56.540 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Apply script ijinit.gradle to build'
15:52:56.541 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.541 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply script ijinit.gradle to build' completed
15:52:56.541 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Run init scripts'
15:52:56.541 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.541 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Run init scripts' completed
15:52:56.542 [DEBUG] [org.gradle.initialization.buildsrc.BuildSourceBuilder] Gradle source dir does not exist. We leave.
15:52:56.543 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.543 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Evaluate settings' started
15:52:56.543 [DEBUG] [org.gradle.initialization.DefaultGradlePropertiesLoader] Found env project properties: []
15:52:56.543 [DEBUG] [org.gradle.initialization.DefaultGradlePropertiesLoader] Found system project properties: []
15:52:56.544 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.544 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply script settings.gradle to settings 'someprj'' started
15:52:56.546 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Apply script settings.gradle to settings 'someprj''
15:52:56.546 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.546 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply script settings.gradle to settings 'someprj'' completed
15:52:56.546 [DEBUG] [org.gradle.initialization.ScriptEvaluatingSettingsProcessor] Timing: Processing settings took: 0.003 secs
15:52:56.547 [INFO] [org.gradle.internal.buildevents.BuildLogger] Settings evaluated using settings file 'E:\prj\school\someprj\settings.gradle'.
15:52:56.547 [DEBUG] [org.gradle.caching.configuration.internal.DefaultBuildCacheConfiguration] Found class org.gradle.caching.local.internal.DirectoryBuildCacheServiceFactory registered for class org.gradle.caching.local.DirectoryBuildCache
15:52:56.547 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.547 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Finalize build cache configuration' started
15:52:56.547 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Finalize build cache configuration'
15:52:56.548 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.548 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Finalize build cache configuration' completed
15:52:56.548 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Evaluate settings'
15:52:56.548 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.548 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Evaluate settings' completed
15:52:56.548 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Load build'
15:52:56.549 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.549 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Load build' completed
15:52:56.549 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.549 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Configure build' started
15:52:56.549 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.549 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Load projects' started
15:52:56.550 [DEBUG] [org.gradle.model.internal.registry.DefaultModelRegistry] Project : - Transitioning model element '' from state Registered to Created
15:52:56.550 [DEBUG] [org.gradle.model.internal.registry.DefaultModelRegistry] Project : - Transitioning model element '' to state Discovered.
15:52:56.551 [DEBUG] [org.gradle.model.internal.registry.DefaultModelRegistry] Project : - Transitioning model element '' to state Created.
15:52:56.552 [DEBUG] [org.gradle.initialization.ProjectPropertySettingBuildLoader] Looking for project properties from: E:\prj\school\someprj\gradle.properties
15:52:56.552 [DEBUG] [org.gradle.initialization.ProjectPropertySettingBuildLoader] project property file does not exists. We continue!
15:52:56.552 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Load projects'
15:52:56.552 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.553 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Load projects' completed
15:52:56.553 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.553 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Notify projectsLoaded listeners' started
15:52:56.553 [INFO] [org.gradle.internal.buildevents.BuildLogger] Projects loaded. Root project using build file 'E:\prj\school\someprj\build.gradle'.
15:52:56.553 [INFO] [org.gradle.internal.buildevents.BuildLogger] Included projects: [root project 'someprj']
15:52:56.553 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.554 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute 'rootProject {}' action' started
15:52:56.557 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Daemon worker Thread 7: acquired lock on :
15:52:56.557 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.557 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Cross-configure project :' started
15:52:56.557 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Cross-configure project :'
15:52:56.557 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.558 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Cross-configure project :' completed
15:52:56.558 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Daemon worker Thread 7: released lock on :
15:52:56.558 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Execute 'rootProject {}' action'
15:52:56.558 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.558 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute 'rootProject {}' action' completed
15:52:56.558 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Notify projectsLoaded listeners'
15:52:56.558 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.559 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Notify projectsLoaded listeners' completed
15:52:56.559 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.560 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.561 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.561 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.562 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.563 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.564 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.565 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.565 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.581 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.582 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.583 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.583 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.584 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.585 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.585 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.586 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.586 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.586 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.587 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.587 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.588 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.588 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.588 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.589 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.590 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.590 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.590 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.591 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.591 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.591 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.591 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.592 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.593 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.593 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.594 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.597 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.600 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.731 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 234: received class org.gradle.launcher.daemon.protocol.CloseInput
15:52:56.731 [DEBUG] [org.gradle.launcher.daemon.server.DefaultDaemonConnection] thread 234: Received IO message from client: org.gradle.launcher.daemon.protocol.CloseInput@2d5ee6e9
15:52:56.733 [INFO] [org.gradle.launcher.daemon.server.exec.ForwardClientInput] Closing daemon's stdin at end of input.
15:52:56.733 [INFO] [org.gradle.launcher.daemon.server.exec.ForwardClientInput] The daemon will no longer process any standard input.
15:52:56.851 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.997 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:57.000 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:57.002 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:57.002 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:57.003 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:57.004 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:56.559 [LIFECYCLE] [org.gradle.internal.logging.progress.ProgressLoggerFactory]
15:52:56.559 [LIFECYCLE] [org.gradle.internal.logging.progress.ProgressLoggerFactory] > Configure project :
15:52:56.560 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Configure project :' started
15:52:56.560 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Daemon worker Thread 7: acquired lock on :
15:52:56.560 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Notify beforeEvaluate listeners of :' started
15:52:56.561 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute Gradle.addProjectEvaluationListener listener' started
15:52:56.561 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Execute Gradle.addProjectEvaluationListener listener'
15:52:56.562 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute Gradle.addProjectEvaluationListener listener' completed
15:52:56.562 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Notify beforeEvaluate listeners of :'
15:52:56.562 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Notify beforeEvaluate listeners of :' completed
15:52:56.563 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply plugin org.gradle.build-init to root project 'someprj'' started
15:52:56.564 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :init' started
15:52:56.564 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :init'
15:52:56.565 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :init' completed
15:52:56.565 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Apply plugin org.gradle.build-init to root project 'someprj''
15:52:56.565 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply plugin org.gradle.build-init to root project 'someprj'' completed
15:52:56.582 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply plugin org.gradle.wrapper to root project 'someprj'' started
15:52:56.582 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :wrapper' started
15:52:56.583 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :wrapper'
15:52:56.583 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :wrapper' completed
15:52:56.583 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Apply plugin org.gradle.wrapper to root project 'someprj''
15:52:56.583 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply plugin org.gradle.wrapper to root project 'someprj'' completed
15:52:56.585 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply plugin org.gradle.help-tasks to root project 'someprj'' started
15:52:56.585 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :help' started
15:52:56.585 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :help'
15:52:56.586 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :help' completed
15:52:56.586 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :projects' started
15:52:56.586 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :projects'
15:52:56.586 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :projects' completed
15:52:56.586 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :tasks' started
15:52:56.587 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :tasks'
15:52:56.587 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :tasks' completed
15:52:56.587 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :properties' started
15:52:56.588 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :properties'
15:52:56.588 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :properties' completed
15:52:56.588 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :dependencyInsight' started
15:52:56.588 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :dependencyInsight'
15:52:56.588 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :dependencyInsight' completed
15:52:56.589 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :dependencies' started
15:52:56.590 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :dependencies'
15:52:56.590 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :dependencies' completed
15:52:56.590 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :buildEnvironment' started
15:52:56.590 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :buildEnvironment'
15:52:56.590 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :buildEnvironment' completed
15:52:56.591 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :components' started
15:52:56.591 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :components'
15:52:56.591 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :components' completed
15:52:56.591 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :model' started
15:52:56.591 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :model'
15:52:56.592 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :model' completed
15:52:56.592 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :dependentComponents' started
15:52:56.592 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Register task :dependentComponents'
15:52:56.593 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Register task :dependentComponents' completed
15:52:56.593 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Apply plugin org.gradle.help-tasks to root project 'someprj''
15:52:56.593 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply plugin org.gradle.help-tasks to root project 'someprj'' completed
15:52:56.593 [INFO] [org.gradle.configuration.project.BuildScriptProcessor] Evaluating root project 'someprj' using build file 'E:\prj\school\someprj\build.gradle'.
15:52:56.594 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply script build.gradle to root project 'someprj'' started
15:52:56.596 [DEBUG] [org.gradle.internal.locking.LockFileReaderWriter] Lockfiles root: E:\prj\school\someprj\gradle\dependency-locks
15:52:56.597 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve dependencies of detachedConfiguration1' started
15:52:56.598 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver] Resolving configuration 'detachedConfiguration1'
15:52:56.598 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.modulecache.ResolvedArtifactCaches] Creating new in-memory cache for repo 'Gradle Central Plugin Repository' [da9e8315a8be71135c1df434dd1d5d54].
15:52:56.599 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder] Visiting configuration unspecified:unspecified:unspecified(detachedConfiguration1).
15:52:56.599 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver] Attempting to resolve component for org.openjfx.javafxplugin:org.openjfx.javafxplugin.gradle.plugin:0.0.8 using repositories [Gradle Central Plugin Repository]
15:52:56.599 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.DefaultExternalResourceArtifactResolver] Loading https://plugins.gradle.org/m2/org/openjfx/javafxplugin/org.openjfx.javafxplugin.gradle.plugin/0.0.8/org.openjfx.javafxplugin.gradle.plugin-0.0.8.pom
15:52:56.600 [DEBUG] [org.gradle.internal.resource.transfer.DefaultCacheAwareExternalResourceAccessor] Constructing external resource: https://plugins.gradle.org/m2/org/openjfx/javafxplugin/org.openjfx.javafxplugin.gradle.plugin/0.0.8/org.openjfx.javafxplugin.gradle.plugin-0.0.8.pom
15:52:56.600 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Download https://plugins.gradle.org/m2/org/openjfx/javafxplugin/org.openjfx.javafxplugin.gradle.plugin/0.0.8/org.openjfx.javafxplugin.gradle.plugin-0.0.8.pom' started
15:52:56.601 [DEBUG] [org.gradle.internal.resource.transport.http.HttpResourceAccessor] Constructing external resource: https://plugins.gradle.org/m2/org/openjfx/javafxplugin/org.openjfx.javafxplugin.gradle.plugin/0.0.8/org.openjfx.javafxplugin.gradle.plugin-0.0.8.pom
15:52:56.601 [DEBUG] [org.gradle.internal.resource.transport.http.HttpClientHelper] Performing HTTP GET: https://plugins.gradle.org/m2/org/openjfx/javafxplugin/org.openjfx.javafxplugin.gradle.plugin/0.0.8/org.openjfx.javafxplugin.gradle.plugin-0.0.8.pom
15:52:56.601 [DEBUG] [org.apache.http.client.protocol.RequestAddCookies] CookieSpec selected: default
15:52:56.603 [DEBUG] [org.apache.http.client.protocol.RequestAuthCache] Auth cache not set in the context
15:52:56.604 [DEBUG] [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] Connection request: [route: {s}->https://plugins.gradle.org:443][total kept alive: 0; route allocated: 0 of 20; total allocated: 0 of 20]
15:52:56.605 [DEBUG] [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] Connection leased: [id: 24][route: {s}->https://plugins.gradle.org:443][total kept alive: 0; route allocated: 1 of 20; total allocated: 1 of 20]
15:52:56.605 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Opening connection {s}->https://plugins.gradle.org:443
15:52:56.605 [DEBUG] [org.apache.http.impl.conn.DefaultHttpClientConnectionOperator] Connecting to plugins.gradle.org/104.18.191.9:443
15:52:56.606 [DEBUG] [org.apache.http.conn.ssl.SSLConnectionSocketFactory] Connecting socket to plugins.gradle.org/104.18.191.9:443 with timeout 30000
15:52:56.702 [DEBUG] [org.apache.http.conn.ssl.SSLConnectionSocketFactory] Enabled protocols: [TLSv1.3, TLSv1.2, TLSv1.1, TLSv1]
15:52:56.702 [DEBUG] [org.apache.http.conn.ssl.SSLConnectionSocketFactory] Enabled cipher suites:[TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
15:52:56.702 [DEBUG] [org.apache.http.conn.ssl.SSLConnectionSocketFactory] Starting handshake
15:52:56.826 [DEBUG] [org.apache.http.impl.conn.DefaultManagedHttpClientConnection] http-outgoing-24: Shutdown connection
15:52:56.826 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Connection discarded
15:52:56.826 [DEBUG] [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] Connection released: [id: 24][route: {s}->https://plugins.gradle.org:443][total kept alive: 0; route allocated: 0 of 20; total allocated: 0 of 20]
15:52:56.826 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Download https://plugins.gradle.org/m2/org/openjfx/javafxplugin/org.openjfx.javafxplugin.gradle.plugin/0.0.8/org.openjfx.javafxplugin.gradle.plugin-0.0.8.pom'
15:52:56.830 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Download https://plugins.gradle.org/m2/org/openjfx/javafxplugin/org.openjfx.javafxplugin.gradle.plugin/0.0.8/org.openjfx.javafxplugin.gradle.plugin-0.0.8.pom' completed
15:52:56.831 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder] Flushing resolved configuration data in Binary store in C:\Users\admin\AppData\Local\Temp\gradle13799229078254788958.bin. Wrote root 2.
15:52:56.997 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Resolve dependencies of detachedConfiguration1'
15:52:56.998 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve dependencies of detachedConfiguration1' completed
15:52:56.998 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Apply script build.gradle to root project 'someprj''
15:52:57.001 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Apply script build.gradle to root project 'someprj'' completed
15:52:57.002 [DEBUG] [org.gradle.configuration.project.BuildScriptProcessor] Timing: Running the build script took 0.408 secs
15:52:57.002 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Notify afterEvaluate listeners of :' started
15:52:57.003 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute Gradle.addProjectEvaluationListener listener' started
15:52:57.003 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Execute Gradle.addProjectEvaluationListener listener'
15:52:57.004 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute Gradle.addProjectEvaluationListener listener' completed
15:52:57.004 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Notify afterEvaluate listeners of :'
15:52:57.004 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Notify afterEvaluate listeners of :' completed
15:52:57.004 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Daemon worker Thread 7: released lock on :
15:52:57.005 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Configure project :'
15:52:57.014 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:57.016 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Configure project :' completed
15:52:57.016 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Configure build'
15:52:57.017 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:57.021 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Configure build' completed
15:52:57.022 [DEBUG] [org.gradle.internal.work.DefaultWorkerLeaseService] Worker lease root.1 completed (0 worker(s) in use)
15:52:57.022 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Daemon worker Thread 7: released lock on root.1
15:52:57.024 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:52:57.024 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
15:52:57.024 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:52:57.024 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Where:
15:52:57.025 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Build file 'E:\prj\school\someprj\build.gradle' line: 3
15:52:57.025 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:52:57.025 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
15:52:57.025 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Plugin [id: 'org.openjfx.javafxplugin', version: '0.0.8'] was not found in any of the following sources:
15:52:57.025 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:52:57.033 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] - Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
15:52:57.033 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] - Plugin Repositories (could not resolve plugin artifact 'org.openjfx.javafxplugin:org.openjfx.javafxplugin.gradle.plugin:0.0.8')
15:52:57.033 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Searched in the following repositories:
15:52:57.033 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Gradle Central Plugin Repository
15:52:57.033 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:52:57.033 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Try:
15:52:57.033 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Run with --stacktrace option to get the stack trace. Run with --scan to get full insights.
15:52:57.034 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
15:52:57.034 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Get more help at https://help.gradle.org
15:52:57.034 [ERROR] [org.gradle.internal.buildevents.BuildResultLogger]
15:52:57.034 [ERROR] [org.gradle.internal.buildevents.BuildResultLogger] CONFIGURE FAILED in 0s
15:52:57.034 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Run build'
15:52:57.036 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 238: dispatching class org.gradle.launcher.daemon.protocol.BuildEvent
15:52:57.040 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Run build' completed
15:52:57.053 [DEBUG] [org.gradle.cache.internal.LockOnDemandCrossProcessCacheAccess] Releasing file lock for cache directory md-supplier (C:\Users\admin.gradle\caches\5.2.1\md-supplier)
15:52:57.053 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cache directory md-supplier (C:\Users\admin.gradle\caches\5.2.1\md-supplier).
15:52:57.059 [DEBUG] [org.gradle.cache.internal.LockOnDemandCrossProcessCacheAccess] Releasing file lock for cache directory md-rule (C:\Users\admin.gradle\caches\5.2.1\md-rule)
15:52:57.059 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on cache directory md-rule (C:\Users\admin.gradle\caches\5.2.1\md-rule).
15:52:57.064 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory] Resolution result cache closed. Cache reads: 0, disk reads: 0 (avg: 0.0 secs, total: 0.0 secs)
15:52:57.065 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory] Resolution result cache closed. Cache reads: 0, disk reads: 0 (avg: 0.0 secs, total: 0.0 secs)
15:52:57.065 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.ResolutionResultsStoreFactory] Deleted 2 resolution results binary files in 0.004 secs
15:52:57.065 [DEBUG] [org.gradle.deployment.internal.DefaultDeploymentRegistry] Stopping 0 deployment handles
15:52:57.065 [DEBUG] [org.gradle.deployment.internal.DefaultDeploymentRegistry] Stopped deployment handles
15:52:57.066 [DEBUG] [org.gradle.cache.internal.LockOnDemandCrossProcessCacheAccess] Releasing file lock for file hash cache (E:\prj\school\someprj.gradle\5.2.1\fileHashes)
15:52:57.066 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on file hash cache (E:\prj\school\someprj.gradle\5.2.1\fileHashes).
15:52:57.068 [DEBUG] [org.gradle.cache.internal.DefaultPersistentDirectoryStore] VCS Checkout Cache (E:\prj\school\someprj.gradle\vcs-1) has last been fully cleaned up 0 hours ago
15:52:57.068 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] Cache VCS Checkout Cache (E:\prj\school\someprj.gradle\vcs-1) was closed 0 times.
15:52:57.068 [DEBUG] [org.gradle.cache.internal.DefaultCacheAccess] Cache VCS metadata (E:\prj\school\someprj.gradle\5.2.1\vcsMetadata-1) was closed 0 times.
15:52:57.073 [DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] The daemon has finished executing the build.

Support to declare modules as `compileOnly`

Currently, it is only possible to add JavaFx dependency as implementation (as already reported by #29 and #11)

There should also be a way to declare the dependency as compileOnly.

With such type of dependency, one could write a library using JavaFX and still publish artifacts not specific to a platform without encountering this kind of problem: #18.

Both Mac and Win dependenies are imported even though docs state otherwise

Hi,
the documentation says:
" The plugin only includes binaries for the platform running the build. "

But when importing the project into IntelliJ on Mac, Gradle provides the dependencies for both win and mac:
grafik

This leads to the error that 'javafx.base' is provided twice:
grafik

What can I do to only have the platform-specific dependencies on my classpath?

Non-modular support only works for the default "run" task

#24 added support for non-modular projects (thank you!). This works fine when using the default run task provided by the application plugin, but not for other JavaExec tasks (the necessary --module-path and --add-modules args are not added for them).

This is a problem when using IntelliJ: if you run a class from IntelliJ (using an "Application" run configuration) in a Gradle-based project, IntelliJ creates and runs a JavaExec task on the fly based on the run configuration's settings. Since this is a new task and not the default run task, the additional arguments for OpenJFX are not added by the plugin.

I would say that all JavaExec tasks should have the additional JVM arguments added, but that might have unintended effects on tasks that execute something non-JavaFX-related. Maybe the plugin should check which tasks have the OpenJFX jars in the classpath, and add the extra options only for those tasks?

For now I've found two workarounds for this issue:

  • You can use a "Gradle" run configuration in IntelliJ to run the Gradle run task. This way IntelliJ uses the predefined task instead of creating a new one.
  • You can manually add the necessary options to the run configuration's "VM Options" field. This isn't very nice as it requires hardcoding the OpenJFX module names and jar paths.

[Solution in comments] Error when running distribution

I've built a simple project using Gradle and JavaFX with this plugin. gradle run works fine and runs my app. gradle build produces a .zip of my project in build/distributions. When I open the zip I see a bin folder and a lib. The lib folder contains a ton of jars, including javafx-base, javafx-controls, and so forth. The bin folder contains a Unix executable. When I run this Unix executable (I'm on a Mac), I receive the following error:

Error: JavaFX runtime components are missing, and are required to run this application

Yet, everything runs fine when I run via gradle run.

What am I missing?

Add support to declare modules as `api`

All dependencies declared via the following block are added as implementation:

javafx {
    modules 'javafx.graphics'
}

There should be a way to declare these dependencies as api as well.

android mandatory 64 bit architecture!

Starting August 1, 2019, your apps published on Google Play will need to support 64-bit architectures. 64-bit CPUs deliver faster, richer experiences for your users. Adding a 64-bit version of your app provides performance improvements, makes way for future innovation, and sets you up for devices with 64-bit-only hardware.

https://developer.android.com/distribute/best-practices/develop/64-bit

Currently there is no way to rellease your application to Google Play.
uploading apk after apkRelease, zipalignRelease gives you this:
image

Please make documentation much more specific as to intended effects of this plugin.

Please provide detailed documentation as to what this plugin is supposed to do: what tasks it is supposed to modify the behavior of, and in what way, and how it will handle issues like .fxml files, whether it will cause conflicts with use of other Gradle features, etc. The current Readme.md is not adequate for determining what effect this plugin will have on a Gradle script, and hence whether using this plugin is a good idea or even which problems it is expected to provide solutions to.

See this JavaFX bug report for more context on this request.

[Modular][SDK] Multiple JavaFX jars on module path

Using a combination of JavaFX SDK and dependencies on a modular HelloFX project results in multiple javafx-controls jars on the module path.

For example:

javafx {
    sdk = "location-to-javafx-sdk-11"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}
dependencies {
    compile 'org.controlsfx:controlsfx:11.0.1';
}

The module path looks like:

--module-path 
hellofx/build/classes/java/main;
.m2/repository/org.controlsfx/controlsfx/11.0.1/controlsfx-11.0.1.jar;
javafx-sdk-11/lib/javafx.controls.jar;
javafx-sdk-11/lib/javafx.fxml.jar;
.m2/repository/org/openjfx/11.0.2/javafx-web-11.0.2.jar;
.m2/repository/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2.jar;
.m2/repository/org/openjfx/javafx-swing/11.0.2/javafx-swing-11.0.2.jar;
.m2/repository/org/openjfx/javafx-media/11.0.2/javafx-media-11.0.2.jar;
.m2/repository/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2.jar;
.m2/repository/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2.jar

There are 2 instances of javafx-controls.jar from the following locations:

  1. JavaFX SDK
  2. As a transitive dependency from ControlsFX

Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init>

This issue happens when running the non-modular sample for IntelliJ when running gradle run inside IntelliJ.

JDK 12 (AdoptOpenJDK 12.0.2 with HotSpot)

Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init>
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
	at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Screen.java:412)
	at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:152)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:835)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
	at javafx.graphics/com.sun.prism.d3d.D3DPipeline.getAdapterOrdinal(D3DPipeline.java:205)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.assignScreensAdapters(QuantumToolkit.java:738)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit(QuantumToolkit.java:334)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$10(QuantumToolkit.java:279)
	at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:153)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:835)

My guess is that the DLLs included in the platform dependencies are not getting loaded for some reason.

Edit: I have also created an issue on IntelliJ IDEA's bug tracker just in case the issue comes from their end https://youtrack.jetbrains.com/issue/IDEA-219912

JavaFX not visible in subfolders?

Maybe this is not an actual issue, but here are the steps I followed.
I'm using IntelliJ, JDK14, Gradle 6.4.
I took your sample, which compiled and ran fine, and added another folder mm with a copy of HelloFX class (MyFile.java).
Screen Shot 2020-05-11 at 10 37 08 AM

I changed the gradle.build file to be:

plugins {
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

repositories {
    mavenCentral()
}

javafx {
    version = "14"
    modules = [ 'javafx.controls' ]
}

sourceSets {
    mm {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += compileClasspath
        runtimeClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.compileClasspath
    }
}

mainClassName = 'HelloFX'

The build and run tasks for the project still work fine, just as before adding the extra folder.

However, when executing the compileMmJava task, I get errors:
Screen Shot 2020-05-11 at 10 41 02 AM

It looks like JavaFX is not visible for mm folder.

How to support both Java 11 and older versions in one Gradle project?

Can this plugin be used in a project that wants to support Java 11 with OpenJFX, but also remain compatible with older Java versions (mainly Java 8) that come with JavaFX included?

At the moment the plugin is built for Java 11 and can't be loaded at all on older Java versions (#2). Would it be possible to build the plugin with support for Java 8, and simply do nothing on Java versions before 11 (since JavaFX is already included in that case)?

I can of course manually check JavaVersion.current().java11Compatible and not load the plugin on older Java versions, but it's not a great solution: I have to add manual ifs in multiple places, and it only works with the old buildscript syntax (since ifs are not allowed in the new plugins block).

Please provide all Gradle scripts in both syntaxes (Groovy and Kotlin DSL)

The Kotlin DSL for Gradle has been fairly recently introduced. Nonetheless, it is already the default syntax for use for Android development. Having to translate example code from Groovy syntax to Kotlin syntax causes potential users of your plugin to have one additional potential source of errors and misunderstandings when trying to use the plugin.

Please provide each Gradle code samples in both syntaxes, to make it unnecessary for a potential user to have to translate one syntax to the other.

See this JavaFX bug report for more context on this request.

JavaFX plugin implicitly puts all code on the module path instead of the classpath

Currently the JavaFX plugin implicitly applies the module plugin (https://github.com/java9-modularity/gradle-modules-plugin):

project.getPlugins().apply(ModuleSystemPlugin.class);

This automatically puts the entire project and its dependencies on the module path rather than the classpath, which is problematic when porting an existing project to Java 11/OpenJFX. (In my case for example I have some dependencies with conflicting package names, i. e. "split packages", which makes them incompatible with the module system.)

This behavior is quite surprising, since the README never mentions modularization anywhere. The guides on openjfx.io explain how to create "non-modular" and "modular" OpenJFX applications using the Gradle plugin, but as far as I can tell even the "non-modular" version uses the module system at runtime (it just doesn't have a module-info.java).

I'm not all that familiar with the module system yet, but from what I've read it is possible to use both the classpath (for non-modular code) and the module path (for modular code) at the same time. In that case, shouldn't it be possible to put OpenJFX on the module path without affecting all of the project code and the dependencies?

In any case, it would be helpful if the documentation explained in what way the module system is used/required, and in particular whether the project code needs to be modularized before it can use OpenJFX.

Automatic download and configure of JavaFX jmods

Currently users must manually download JavaFX jmods and set the path.to.fx.mods property. It would be nice if the plugin could do this automatically.

Also why can't the jmods files be placed in Maven Central?

Gradle: as soon as javafxplugin is used, classpath of the corresponding module gets erased

As titled, if I assemble with the plugin:

plugins {   
    ...
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

Then my classPath is completely empty

compileJava {
    inputs.property("moduleName", moduleName)
    doFirst {
        println("[$moduleName]classpath.asPath: $classpath.asPath") // nothing
        options.compilerArgs = ['--module-path', classpath.asPath,]
        classpath = files()
    }
}

and then the modules are not found (JPMS)

build.gradle and module here

This seems to be a valid workaround atm:

def currentOS = org.gradle.internal.os.OperatingSystem.current()
def platform
if (currentOS.isWindows()) {
    platform = 'win'
} else if (currentOS.isLinux()) {
    platform = 'linux'
} else if (currentOS.isMacOsX()) {
    platform = 'mac'
}
dependencies {
    compile "org.openjfx:javafx-base:11:${platform}"
    compile "org.openjfx:javafx-graphics:11:${platform}"
    compile "org.openjfx:javafx-controls:11:${platform}"
    compile "org.openjfx:javafx-fxml:11:${platform}"
}

is Java11 required?

I'm about to jump to Java11 but our build server is still on Java10 for the next two weeks.
Thus I hoped to get it temporarily running (or at least compiled) on Java10.

Unfortunately this plugin (taken from plugins.gradle.org) was compiled by Java11 (class file version 55.0) while FX11 itself seems still on 54.0.

But maybe using JavaFX11 with Java10 does not work anyway.

Task to Download OS-specific OpenJFX SDK

Would be nice to have a task to allow user to quickly download the OS-specific, non-LTS JavaFX SDK based on where the Gradle build is being executed.

$ gradle downloadFXsdk

With this task, one could use the downloaded SDK instead of relying on manual downloads, custom tasks, or shell scripts to get the SDK to an external folder.

Support building/running tests (e.g. JUnit tests)

The plugin does not yet appear to support building and running of test code (e.g. Junit5 test suites) from the appropriate Gradle targets, if the code to be tested or the test code has compile-time or runtime dependencies on JavaFX modules. Please support this.

Plugin should not add dependencies in afterEvaluate

When running in a gradle multi-project, the build will fail with an error similar to the following:

A problem occurred configuring project ':Base'.
> Cannot change dependencies of configuration ':Base:compile' after it has been included in dependency resolution.

This is caused by the plugin modifying the dependencies in the afterEvaluate project method.

I have resolved this issue in a fork and submitted a pull request, q.v.:

Pull request #15

Cross-platform support via start script

#41 allows to remove platform lock, but it does not provide full cross-platform support requested by #18 and #35. The proposal has several parts:

  • Automatically declare javafx dependencies as compileOnly for projects without application plugin or otherwise marked as library, so there would be no mistakes from including several dependencies for different platforms. Turn dependencies to implementation only for projects with application plugin.

  • Provide a way to explicitly declare target platform for distribution. For example, it could be done like this:

javafx{
  target( WINDOWS, LINUX ) // those are members of enum
}

In case platform clause present, it should create a configuration for each platform and create a distribution for each (using implementation mode for plarform-specific dependency).

  • Provide a regime in which dependencies are not included, but resolved from specific place:
javafx{
  //path to a system-wide fx jmods placement. Has some reasonable default like "../javafx"
  fxpath : String  = ""
  /*
   *  if true, use fxpath to search for javafx distribution (change start script for application).
   *  Is set to [true] automatically, when [fxpath] is set
   */
  local : Boolean = true 
}
  • Automatically download and install system-specific dependencies into path provided by fxpath. This requires a lot of work and is not first order concern.

How to create Windows executables(Exe) files from this Plugin

Hi,

I have followed the instructions to add this plugin to my build.gradle file.

Now I am done with my JavaFX Application and I wish to package the final application as an executable .exe file for the Windows Platform . How can I do that? Thanks.

Compile the plugin against Java 8

While the plugin itself is not useful in a build using JDK 8, it cannot be included and conditionally applied without jumping through hoops:

buildscript {
	repositories {
		maven {
			url 'https://plugins.gradle.org/m2/'
		}
	}
	dependencies {
		classpath 'org.openjfx:javafx-plugin:0.0.8'
	}
}

plugins {
	// ...
	// this does not work due to Gradle attempting to load the classes anyway:
	// id 'org.openjfx.javafx-plugin' version '0.0.8' apply false
	// also, it is not permitted to use if statements in this block.
}

if (JavaVersion.current().java11Compatible) {
	apply plugin: 'org.openjfx.javafxplugin'

	javafx { ... }
}

The use case is a project which can be compiled against Java 8 and Java 11.

java.lang.NoSuchMethodError: com/sun/glass/ui/Screen.<init>

I keep getting this error in multiple circumstances, including gradle run, and I can't do much about it.

Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: com/sun/glass/ui/Screen.<init>(JIIIIIIIIIIIFF)V (loaded from file:/C:/Users/matth/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/12.0.1/18a01ffdd4edb82e7da3bc99937c6a608d1eaaa6/javafx-graphics-12.0.1-win.jar by jdk.internal.loader.ClassLoaders$AppClassLoader@b3361661) called from class com.sun.glass.ui.win.WinApplication (loaded from file:/C:/Users/matth/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/12.0.1/18a01ffdd4edb82e7da3bc99937c6a608d1eaaa6/javafx-graphics-12.0.1-win.jar by jdk.internal.loader.ClassLoaders$AppClassLoader@b3361661).
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
	at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Screen.java:412)
	at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:152)
	at com.sun.glass.ui.Application$$Lambda$120.00000000A0FAC830.run(Unknown Source)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at com.sun.glass.ui.win.WinApplication$$Lambda$124.00000000A0EE9880.run(Unknown Source)
	at java.base/java.lang.Thread.run(Thread.java:825)
Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: com/sun/glass/ui/Screen.<init>(JIIIIIIIIIIIFF)V (loaded from file:/C:/Users/matth/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/12.0.1/18a01ffdd4edb82e7da3bc99937c6a608d1eaaa6/javafx-graphics-12.0.1-win.jar by jdk.internal.loader.ClassLoaders$AppClassLoader@b3361661) called from class com.sun.glass.ui.win.WinApplication (loaded from file:/C:/Users/matth/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/12.0.1/18a01ffdd4edb82e7da3bc99937c6a608d1eaaa6/javafx-graphics-12.0.1-win.jar by jdk.internal.loader.ClassLoaders$AppClassLoader@b3361661).
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
	at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Screen.java:412)
	at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:152)
	at com.sun.glass.ui.Application$$Lambda$120.00000000A0FAC830.run(Unknown Source)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at com.sun.glass.ui.win.WinApplication$$Lambda$124.00000000A0EE9880.run(Unknown Source)
	at java.base/java.lang.Thread.run(Thread.java:825)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
	at javafx.graphics/com.sun.prism.d3d.D3DPipeline.getAdapterOrdinal(D3DPipeline.java:205)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.assignScreensAdapters(QuantumToolkit.java:738)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit(QuantumToolkit.java:334)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$10(QuantumToolkit.java:279)
	at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$117.00000000A1A1F210.run(Unknown Source)
	at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:153)
	at com.sun.glass.ui.Application$$Lambda$120.00000000A0FAC830.run(Unknown Source)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at com.sun.glass.ui.win.WinApplication$$Lambda$124.00000000A0EE9880.run(Unknown Source)
	at java.base/java.lang.Thread.run(Thread.java:825)

Remove classifier from JavaFX artifacts when publishing to Maven Central

The JavaFX gradle plugin applies the required platform-dependent classifier to any JavaFX module included in a project.

But if this project is being published with the maven plugin, this plugin generates a pom file based on the existing dependencies. Since the JavaFX ones include the classifier, this classifier will go to the pom. In other words, the pom will have a JavaFX dependency with a classifier based on the platform from where it was published.

If later on this library is consumed in a different platform, artifacts for both platforms will be added, causing a possible conflict due to split package.

To avoid this issue, the JavaFX gradle plugin could add a task to remove the classifier in case the maven plugin is used.

how to download specific fx version and platform?

Hi, I'm trying to download specific version of javafx modules

I'm using gradle 6.5 and this is my build.gradle. Note, I'm using nexus as a proxy but this shouldn't matter.

plugins {
    // Apply the java-library plugin to add support for Java Library
    id 'java-library'
    id 'eclipse'
    id 'org.openjfx.javafxplugin' version'0.0.8'
    id 'org.springframework.boot' version '2.3.1.RELEASE'
	id 'io.spring.dependency-management' version '1.0.9.RELEASE'
	id 'io.freefair.lombok' version '5.1.0'
}

repositories {
	maven {
		url "${nexusUrl}/repository/mvn-group/"
	}
}

javafx {
	version = '14.01'
	modules = [ 'javafx.base', 'javafx.controls', 'javafx.fxml', 'javafx.graphics', 'javafx.media', 'javafx.swing', 'javafx.web' ]
    // configuration = 'compileOnly'
}

It will complain this

image

It will work if I change to 14 instead of 14.01. 14.01 does exist in mvnrepo

I also wish to download for a specific platform, or rather, I would like to download all type of platforms available. I tried to add configuration = 'compileOnly' but it doesn't seem to work. Is there a config for me to set to download by platform? I tried to look through the issues, but don't seem to find any.

Thanks!

Build fails when using plugin, but it passes when javafx dependencies added manually

I have encountered following problem with build using javafx-gradle-plugin:

$ ./gradlew build

> Configure project :
Found module name 'demo.main'

> Task :compileTestJava FAILED
error: the unnamed module reads package com.github.jknack.handlebars.helper from both handlebars.helpers and handlebars
error: the unnamed module reads package javax.activation from both org.apache.sling.javax.activation and activation
error: the unnamed module reads package org.codehaus.groovy.runtime from both org.codehaus.groovy.xml and org.codehaus.groovy
error: the unnamed module reads package groovy.xml from both org.codehaus.groovy.xml and org.codehaus.groovy
error: the unnamed module reads package groovy.util from both org.codehaus.groovy.xml and org.codehaus.groovy
error: module javafx.baseEmpty reads package com.github.jknack.handlebars.helper from both handlebars.helpers and handlebars
error: module javafx.baseEmpty reads package javax.activation from both org.apache.sling.javax.activation and activation
error: module javafx.baseEmpty reads package org.codehaus.groovy.runtime from both org.codehaus.groovy.xml and org.codehaus.groovy
error: module javafx.baseEmpty reads package groovy.xml from both org.codehaus.groovy.xml and org.codehaus.groovy
error: module javafx.baseEmpty reads package groovy.util from both org.codehaus.groovy.xml and org.codehaus.groovy
error: module wiremock reads package com.github.jknack.handlebars.helper from both handlebars.helpers and handlebars
error: module wiremock reads package javax.activation from both org.apache.sling.javax.activation and activation
error: module wiremock reads package org.codehaus.groovy.runtime from both org.codehaus.groovy.xml and org.codehaus.groovy
error: module wiremock reads package groovy.xml from both org.codehaus.groovy.xml and org.codehaus.groovy
error: module wiremock reads package groovy.util from both org.codehaus.groovy.xml and org.codehaus.groovy
// (...) a lot more errors here...
error: module org.xmlunit reads package groovy.util from both org.codehaus.groovy.xml and org.codehaus.groovy
100 errors

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileTestJava'.
> Compilation failed; see the compiler error output for details.

* 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 0s
3 actionable tasks: 3 executed

My application fetches data from some external services which are mocked using wiremock within tests. Gradle configuration here. Build passes once either I remove javafx plugin or wiremock dependency.

I have tested various build configuration and here are the results:

Build configuration Configuration file Result
Gradle with plugin build.gradle Build fails due to error above
Gradle without plugin (dependencies added manually) build.gradle Build passes
Maven with plugin pom.xml Build passes

Following example project is affected by the issue: https://github.com/kr5ture/javafx-gradle-plugin-issue/tree/gradle-with-plugin . I created three branches with build configurations by the table above.

Support transitive module dependencies

Suppose I have multi-project build where A is a base and B and C depends on it. 'A' is a library and does not include application plugin, but B and C do have main class etc. Currently, if I apply plugin to A, then everything works fine in compile time, but I am missing FX runtime for B and C. Is it possible to make runtime libraries transitive?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.