From 2f600e7be2c364cfc51e9208defde353926974b3 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 13 May 2025 20:55:53 +0200 Subject: [PATCH 01/29] Switch to gradlex --- build-logic/build.gradle.kts | 4 + ...ldlogic.java-common-conventions.gradle.kts | 46 +++++++++++ build.gradle.kts | 5 -- jabgui/build.gradle.kts | 76 +++---------------- jabkit/build.gradle.kts | 3 +- jablib/build.gradle.kts | 19 ----- settings.gradle.kts | 21 +---- 7 files changed, 66 insertions(+), 108 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 58a475186fc..1980eb9aeaf 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -9,6 +9,10 @@ repositories { } dependencies { + implementation("org.gradlex:java-module-testing:1.7") + implementation("org.gradlex:java-module-dependencies:1.9") + implementation("org.gradlex:extra-java-module-info:1.12") + configurations .matching { it.name.contains("downloadSources") } .configureEach { diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 113b1674a22..1ae687fa4b6 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -6,6 +6,9 @@ plugins { // id("jacoco") id("project-report") + + id("org.gradlex.extra-java-module-info") + id("org.gradlex.java-module-testing") } repositories { @@ -26,6 +29,49 @@ dependencies { } } +extraJavaModuleInfo { + failOnMissingModuleInfo = false + failOnAutomaticModules = false + // skipLocalJars = true + deriveAutomaticModuleNamesFromFileNames = true + module("org.openjfx:javafx-base", "org.jabref.merged.module") { + exports("com.sun.javafx.event") + patchRealModule() + } + module("org.openjfx:javafx-base", "org.jabref") { + opens("javafx.collections", "javafx.collections.transformation") + patchRealModule() + } + module("org.openjfx:javafx-controls", "org.jabref") { + exports("com.sun.javafx.scene.control") + opens("javafx.scene.control", "com.sun.javafx.scene.control", "javafx.scene.control.skin") + patchRealModule() + } + module("org.openjfx:javafx-graphics", "org.controlsfx.controls") { + exports("com.sun.javafx.scene") + exports("com.sun.javafx.scene.traversal") + exports("com.sun.javafx.css") + patchRealModule() + } + module("org.openjfx:javafx-controls", "org.controlsfx.controls") { + exports("com.sun.javafx.scene.control") + exports("com.sun.javafx.scene.control.behavior") + exports("com.sun.javafx.scene.control.inputmap") + opens("javafx.scene") + patchRealModule() + } + module("org.openjfx:javafx-base", "org.controlsfx.controls") { + exports("com.sun.javafx.event") + exports("com.sun.javafx.collections") + exports("com.sun.javafx.runtime") + patchRealModule() + } + module("org.controlsfx:controls", "org.jabref") { + opens("impl.org.controlsfx.skin", "org.controlsfx.control.textfield") + patchRealModule() + } +} + testing { suites { val test by getting(JvmTestSuite::class) { diff --git a/build.gradle.kts b/build.gradle.kts index 3c79488f4c6..9e7c285dbe2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,9 +9,6 @@ plugins { id("org.itsallcode.openfasttrace") version "3.0.1" id("com.adarshr.test-logger") version "4.0.0" - - // This is https://github.com/java9-modularity/gradle-modules-plugin/pull/282 - id("com.github.koppor.gradle-modules-plugin") version "v1.8.15-cmd-1" } // OpenRewrite should rewrite all sources @@ -62,8 +59,6 @@ subprojects { // Hint from https://stackoverflow.com/a/46533151/873282 plugins.apply("com.adarshr.test-logger") - plugins.apply("com.github.koppor.gradle-modules-plugin") - checkstyle { toolVersion = "10.23.0" configFile = rootProject.file("config/checkstyle/checkstyle.xml") diff --git a/jabgui/build.gradle.kts b/jabgui/build.gradle.kts index f8eed52afc5..ab3bad7de94 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -1,7 +1,5 @@ import org.gradle.internal.os.OperatingSystem import org.gradle.kotlin.dsl.annotationProcessor -import org.javamodularity.moduleplugin.extensions.CompileModuleOptions -import org.javamodularity.moduleplugin.extensions.RunModuleOptions plugins { id("buildlogic.java-common-conventions") @@ -178,10 +176,6 @@ application { ) } -// Workaround for https://github.com/openjfx/javafx-gradle-plugin/issues/89 -// See also https://github.com/java9-modularity/gradle-modules-plugin/issues/165 -modularity.disableEffectiveArgumentsAdjustment() - /* jacoco { toolVersion = "0.8.13" @@ -195,65 +189,10 @@ tasks.named("run") { doFirst { // Clear the default JVM arguments to avoid warnings // application.applicationDefaultJvmArgs = emptyList() - application.applicationDefaultJvmArgs = listOf("--enable-native-access=ai.djl.tokenizers,ai.djl.pytorch_engine,com.sun.jna,javafx.graphics,javafx.media,javafx.web,org.apache.lucene.core") - } - - extensions.configure("moduleOptions") { - // On a change here, also adapt "application > applicationDefaultJvmArgs" - addExports.putAll( - mapOf( - // TODO: Remove access to internal API - "javafx.base/com.sun.javafx.event" to "org.jabref.merged.module", - "javafx.controls/com.sun.javafx.scene.control" to "org.jabref", - - // ControlsFX compatibility - // We need to restate the ControlsFX exports, because we get following error otherwise: - // java.lang.IllegalAccessError: - // class org.controlsfx.control.textfield.AutoCompletionBinding (in module org.controlsfx.controls) - // cannot access class com.sun.javafx.event.EventHandlerManager (in module javafx.base) because - // module javafx.base does not export com.sun.javafx.event to module org.controlsfx.controls - // Taken from here: https://github.com/controlsfx/controlsfx/blob/9.0.0/build.gradle#L1 - "javafx.graphics/com.sun.javafx.scene" to "org.controlsfx.controls", - "javafx.graphics/com.sun.javafx.scene.traversal" to "org.controlsfx.controls", - "javafx.graphics/com.sun.javafx.css" to "org.controlsfx.controls", - "javafx.controls/com.sun.javafx.scene.control" to "org.controlsfx.controls", - "javafx.controls/com.sun.javafx.scene.control.behavior" to "org.controlsfx.controls", - "javafx.controls/com.sun.javafx.scene.control.inputmap" to "org.controlsfx.controls", - "javafx.base/com.sun.javafx.event" to "org.controlsfx.controls", - "javafx.base/com.sun.javafx.collections" to "org.controlsfx.controls", - "javafx.base/com.sun.javafx.runtime" to "org.controlsfx.controls", - "javafx.web/com.sun.webkit" to "org.controlsfx.controls" - ) - ) - - addOpens.putAll( - mapOf( - "javafx.controls/javafx.scene.control" to "org.jabref", - "javafx.controls/com.sun.javafx.scene.control" to "org.jabref", - "org.controlsfx.controls/impl.org.controlsfx.skin" to "org.jabref", - "org.controlsfx.controls/org.controlsfx.control.textfield" to "org.jabref", - "javafx.controls/javafx.scene.control.skin" to "org.controlsfx.controls", - "javafx.graphics/javafx.scene" to "org.controlsfx.controls", - "javafx.base/javafx.collections" to "org.jabref", - "javafx.base/javafx.collections.transformation" to "org.jabref" - ) - ) - - addModules.add("jdk.incubator.vector") - - createCommandLineArgumentFile = true - } -} - -tasks.compileJava { - extensions.configure { - addExports.putAll( - mapOf( - // TODO: Remove access to internal api - "javafx.controls/com.sun.javafx.scene.control" to "org.jabref", - "org.controlsfx.controls/impl.org.controlsfx.skin" to "org.jabref" + application.applicationDefaultJvmArgs = + listOf( + "--enable-native-access=ai.djl.tokenizers,ai.djl.pytorch_engine,com.sun.jna,javafx.graphics,javafx.media,javafx.web,org.apache.lucene.core" ) - ) } } @@ -281,7 +220,8 @@ jlink { "zip-6", "--no-header-files", "--no-man-pages", - "--bind-services" + "--bind-services", + "--add-modules", "jdk.incubator.vector" ) launcher { @@ -597,3 +537,9 @@ if (OperatingSystem.current().isWindows) { } } } + +javaModuleTesting.whitebox(testing.suites["test"]) { + requires.add("org.junit.jupiter.api") + // opensTo.add("org.junit.platform.commons") <-- opensTo 'org.junit.platform.commons' is done by default + // exportsTo.add("...") +} diff --git a/jabkit/build.gradle.kts b/jabkit/build.gradle.kts index 9f57737c0fb..3d3589c1a3a 100644 --- a/jabkit/build.gradle.kts +++ b/jabkit/build.gradle.kts @@ -95,7 +95,8 @@ jlink { "zip-6", "--no-header-files", "--no-man-pages", - "--bind-services" + "--bind-services", + "--add-modules", "jdk.incubator.vector" ) launcher { diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index cfbf40d6335..4d0225b3a6c 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -398,20 +398,6 @@ tasks.withType().configureEach { options.isFork = true } -/* -tasks.named("compileJava") { - extensions.configure("moduleOptions") { - addExports.putAll( - mapOf( - // TODO: Remove access to internal api - "javafx.controls/com.sun.javafx.scene.control" to "org.jabref", - "org.controlsfx.controls/impl.org.controlsfx.skin" to "org.jabref" - ) - ) - } -} -*/ - tasks.javadoc { (options as StandardJavadocDocletOptions).apply { encoding = "UTF-8" @@ -429,11 +415,6 @@ tasks.test { useJUnitPlatform { excludeTags("DatabaseTest", "FetcherTest") } - - extensions.configure("moduleOptions") { - // TODO: Remove this as soon as ArchUnit is modularized - runOnClasspath = true - } } jmh { diff --git a/settings.gradle.kts b/settings.gradle.kts index 77a936ffb10..00b213add0c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,22 +1,4 @@ pluginManagement { - resolutionStrategy { - eachPlugin { - // Hint from https://github.com/jitpack/jitpack.io/issues/1459#issuecomment-1279851731 - // Updated solution at https://github.com/foodiestudio/convention-plugins?tab=readme-ov-file#convention-plugins - if (requested.id.id.startsWith("com.github.koppor")) { - // This is https://github.com/java9-modularity/gradle-modules-plugin/pull/282 - useModule("com.github.koppor:gradle-modules-plugin:1.8.15-cmd-1") - } - } - } - - repositories { - maven { - url = uri("https://jitpack.io") - } - gradlePluginPortal() - } - includeBuild("build-logic") } @@ -27,3 +9,6 @@ plugins { rootProject.name = "JabRef" include("jablib", "jabkit", "jabgui", "jabsrv", "test-support") + +// https://github.com/gradlex-org/java-module-dependencies#plugin-dependency +includeBuild(".") From a78fffa09644e5cc064802c4e24569c6fbc18bb5 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 13 May 2025 22:23:20 +0200 Subject: [PATCH 02/29] Move javafx plugion to common-conventions --- build-logic/build.gradle.kts | 1 + .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 2 ++ jabgui/build.gradle.kts | 2 -- jabkit/build.gradle.kts | 3 --- jablib/build.gradle.kts | 2 -- jabsrv/build.gradle.kts | 2 -- test-support/build.gradle.kts | 2 -- 7 files changed, 3 insertions(+), 11 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 1980eb9aeaf..f814f2bde98 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { implementation("org.gradlex:java-module-testing:1.7") implementation("org.gradlex:java-module-dependencies:1.9") implementation("org.gradlex:extra-java-module-info:1.12") + implementation("org.openjfx:javafx-plugin:0.1.0") configurations .matching { it.name.contains("downloadSources") } diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 1ae687fa4b6..c4836e38ea1 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -9,6 +9,8 @@ plugins { id("org.gradlex.extra-java-module-info") id("org.gradlex.java-module-testing") + + id("org.openjfx.javafxplugin") } repositories { diff --git a/jabgui/build.gradle.kts b/jabgui/build.gradle.kts index ab3bad7de94..0fef8ae1bb9 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -6,8 +6,6 @@ plugins { application - id("org.openjfx.javafxplugin") version("0.1.0") - // Do not activate; causes issues with the modularity plugin (no tests found etc) // id("com.redock.classpathtofile") version "0.1.0" diff --git a/jabkit/build.gradle.kts b/jabkit/build.gradle.kts index 3d3589c1a3a..548b6874a6b 100644 --- a/jabkit/build.gradle.kts +++ b/jabkit/build.gradle.kts @@ -3,9 +3,6 @@ plugins { application - // afterburner.fx - id("org.openjfx.javafxplugin") version("0.1.0") - id("org.beryx.jlink") version "3.1.1" } diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index 4d0225b3a6c..c4ef5a88744 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -11,8 +11,6 @@ plugins { id("antlr") id("com.github.edeandrea.xjc-generation") version "1.6" - id("org.openjfx.javafxplugin") version("0.1.0") - id("me.champeau.jmh") version "0.7.3" } diff --git a/jabsrv/build.gradle.kts b/jabsrv/build.gradle.kts index f6b60d54dd7..3a72d557bad 100644 --- a/jabsrv/build.gradle.kts +++ b/jabsrv/build.gradle.kts @@ -4,8 +4,6 @@ plugins { id("buildlogic.java-common-conventions") application - - id("org.openjfx.javafxplugin") version("0.1.0") } application{ diff --git a/test-support/build.gradle.kts b/test-support/build.gradle.kts index d349f3182ef..12c8edd0a34 100644 --- a/test-support/build.gradle.kts +++ b/test-support/build.gradle.kts @@ -1,7 +1,5 @@ plugins { id("buildlogic.java-common-conventions") - - id("org.openjfx.javafxplugin") version("0.1.0") } dependencies { From 383eff7db27e9e53d783fef5747ec7e2d88270a1 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 13 May 2025 22:35:05 +0200 Subject: [PATCH 03/29] Fix JavaFX patching --- .../buildlogic.java-common-conventions.gradle.kts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index c4836e38ea1..8a346ae0591 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -39,21 +39,25 @@ extraJavaModuleInfo { module("org.openjfx:javafx-base", "org.jabref.merged.module") { exports("com.sun.javafx.event") patchRealModule() + preserveExisting() } module("org.openjfx:javafx-base", "org.jabref") { opens("javafx.collections", "javafx.collections.transformation") patchRealModule() + preserveExisting() } module("org.openjfx:javafx-controls", "org.jabref") { exports("com.sun.javafx.scene.control") opens("javafx.scene.control", "com.sun.javafx.scene.control", "javafx.scene.control.skin") patchRealModule() + preserveExisting() } module("org.openjfx:javafx-graphics", "org.controlsfx.controls") { exports("com.sun.javafx.scene") exports("com.sun.javafx.scene.traversal") exports("com.sun.javafx.css") patchRealModule() + preserveExisting() } module("org.openjfx:javafx-controls", "org.controlsfx.controls") { exports("com.sun.javafx.scene.control") @@ -61,16 +65,14 @@ extraJavaModuleInfo { exports("com.sun.javafx.scene.control.inputmap") opens("javafx.scene") patchRealModule() + preserveExisting() } module("org.openjfx:javafx-base", "org.controlsfx.controls") { exports("com.sun.javafx.event") exports("com.sun.javafx.collections") exports("com.sun.javafx.runtime") patchRealModule() - } - module("org.controlsfx:controls", "org.jabref") { - opens("impl.org.controlsfx.skin", "org.controlsfx.control.textfield") - patchRealModule() + preserveExisting() } } From 34c53ecb348ea4b9656f6f956c88c0b3cfbb4f58 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 13 May 2025 22:40:42 +0200 Subject: [PATCH 04/29] Fix controlsfx --- .../kotlin/buildlogic.java-common-conventions.gradle.kts | 6 ++++++ jabkit/build.gradle.kts | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 8a346ae0591..b5caa30d054 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -74,6 +74,12 @@ extraJavaModuleInfo { patchRealModule() preserveExisting() } + module("org.controlsfx:controlsfx", "org.jabref") { + opens("impl.org.controlsfx.skin", "org.controlsfx.control.textfield") + exports("impl.org.controlsfx.skin") + patchRealModule() + preserveExisting() + } } testing { diff --git a/jabkit/build.gradle.kts b/jabkit/build.gradle.kts index 548b6874a6b..27d795fb340 100644 --- a/jabkit/build.gradle.kts +++ b/jabkit/build.gradle.kts @@ -102,7 +102,6 @@ jlink { // TODO: Remove as soon as dependencies are fixed (upstream) forceMerge( - "controlsfx", "bcprov", "jaxb", "istack", From c367d1055947fde97e607b3cb708b0842c00ee16 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 13 May 2025 23:09:47 +0200 Subject: [PATCH 05/29] Remove version number at Juptier dependency --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index b5caa30d054..eb48cfa3d0e 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -85,7 +85,7 @@ extraJavaModuleInfo { testing { suites { val test by getting(JvmTestSuite::class) { - useJUnitJupiter("5.12.2") + useJUnitJupiter() } } } From 369cfd3b8677fe7b7aea1b3646d93d1ca6eaefd8 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 13 May 2025 23:11:09 +0200 Subject: [PATCH 06/29] Switch to jvm-test-suite --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 1 + jablib/build.gradle.kts | 1 + 2 files changed, 2 insertions(+) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index eb48cfa3d0e..a8a5c609ecf 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -1,5 +1,6 @@ plugins { java + `jvm-test-suite` id("idea") diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index c4ef5a88744..f7a8950306e 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -5,6 +5,7 @@ plugins { id("buildlogic.java-common-conventions") `java-library` + `jvm-test-suite` id("idea") From fcd2c649ab3f10a9b2b7712820e6dd19b7377fd4 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 13 May 2025 23:11:27 +0200 Subject: [PATCH 07/29] Try to fix ControlfsFX --- ...buildlogic.java-common-conventions.gradle.kts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index a8a5c609ecf..522015585e4 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -53,21 +53,21 @@ extraJavaModuleInfo { patchRealModule() preserveExisting() } - module("org.openjfx:javafx-graphics", "org.controlsfx.controls") { - exports("com.sun.javafx.scene") - exports("com.sun.javafx.scene.traversal") - exports("com.sun.javafx.css") - patchRealModule() - preserveExisting() - } module("org.openjfx:javafx-controls", "org.controlsfx.controls") { - exports("com.sun.javafx.scene.control") + exports("com.sun.javafx.scene.control") // already done for org.jabref exports("com.sun.javafx.scene.control.behavior") exports("com.sun.javafx.scene.control.inputmap") opens("javafx.scene") patchRealModule() preserveExisting() } + module("org.openjfx:javafx-graphics", "org.controlsfx.controls") { + exports("com.sun.javafx.scene") + exports("com.sun.javafx.scene.traversal") + exports("com.sun.javafx.css") + patchRealModule() + preserveExisting() + } module("org.openjfx:javafx-base", "org.controlsfx.controls") { exports("com.sun.javafx.event") exports("com.sun.javafx.collections") From 36d69046d051ad9c7d49700abbb204099fd0176d Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Tue, 13 May 2025 23:11:36 +0200 Subject: [PATCH 08/29] First draft for module test --- jablib/build.gradle.kts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index f7a8950306e..daf5685a40c 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -476,3 +476,19 @@ jacocoTestReport { } } */ + +javaModuleTesting.whitebox(testing.suites["test"]) { + requires.add("io.github.classgraph") + requires.add("org.junit.jupiter.api") + requires.add("org.junit.jupiter.params") + requires.add("org.jabref.testsupport") + requires.add("org.mockito") + + // --add-opens + opensTo.add("javafx.base/com.sun.javafx.beans=net.bytebuddy") + opensTo.add("javafx.fxml/javafx.fxml=org.jabref") + + // --add-reads + //reads.add("org.jabref.jablib=io.github.classgraph") + //reads.add("org.jabref.jablib=org.jabref.testsupport") +} From 08489eea857fe27f842468503db1fc4a5f2a140f Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 14 May 2025 22:16:46 +0200 Subject: [PATCH 09/29] Remove jvm-test-suite --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 1 - jablib/build.gradle.kts | 1 - 2 files changed, 2 deletions(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 522015585e4..92e666975c6 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -1,6 +1,5 @@ plugins { java - `jvm-test-suite` id("idea") diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index daf5685a40c..270752ce380 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -5,7 +5,6 @@ plugins { id("buildlogic.java-common-conventions") `java-library` - `jvm-test-suite` id("idea") From 5c4e88287992aab5fa99dc1ac212ad013cb7045c Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 14 May 2025 22:49:24 +0200 Subject: [PATCH 10/29] Try to fix module declarations --- ...ldlogic.java-common-conventions.gradle.kts | 37 ++++++------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 92e666975c6..a6c7dc8bd8f 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -36,49 +36,34 @@ extraJavaModuleInfo { failOnAutomaticModules = false // skipLocalJars = true deriveAutomaticModuleNamesFromFileNames = true - module("org.openjfx:javafx-base", "org.jabref.merged.module") { - exports("com.sun.javafx.event") - patchRealModule() + module("org.openjfx:javafx-base", "javafx.base") { preserveExisting() - } - module("org.openjfx:javafx-base", "org.jabref") { + exports("com.sun.javafx.event") opens("javafx.collections", "javafx.collections.transformation") - patchRealModule() - preserveExisting() } - module("org.openjfx:javafx-controls", "org.jabref") { - exports("com.sun.javafx.scene.control") - opens("javafx.scene.control", "com.sun.javafx.scene.control", "javafx.scene.control.skin") - patchRealModule() + module("org.openjfx:javafx-controls", "javafx.controls") { preserveExisting() - } - module("org.openjfx:javafx-controls", "org.controlsfx.controls") { - exports("com.sun.javafx.scene.control") // already done for org.jabref + exports("com.sun.javafx.scene.control") exports("com.sun.javafx.scene.control.behavior") - exports("com.sun.javafx.scene.control.inputmap") - opens("javafx.scene") - patchRealModule() - preserveExisting() + exports("com.sun.javafx.scene.control.inputmat") + opens("javafx.scene.control", "com.sun.javafx.scene.control", "javafx.scene.control.skin") } module("org.openjfx:javafx-graphics", "org.controlsfx.controls") { + preserveExisting() exports("com.sun.javafx.scene") exports("com.sun.javafx.scene.traversal") exports("com.sun.javafx.css") - patchRealModule() - preserveExisting() } module("org.openjfx:javafx-base", "org.controlsfx.controls") { + preserveExisting() exports("com.sun.javafx.event") exports("com.sun.javafx.collections") exports("com.sun.javafx.runtime") - patchRealModule() - preserveExisting() } - module("org.controlsfx:controlsfx", "org.jabref") { - opens("impl.org.controlsfx.skin", "org.controlsfx.control.textfield") - exports("impl.org.controlsfx.skin") - patchRealModule() + module("org.controlsfx:controlsfx", "controlsfx") { preserveExisting() + opens("impl.org.controlsfx.skin") + exports("impl.org.controlsfx.skin") } } From 3c8073c123ab497c0f87ec372f11546a87161adb Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Thu, 15 May 2025 13:22:07 +0200 Subject: [PATCH 11/29] WIP: replace org.openjfx.javafxplugin by work of gradlex --- build-logic/build.gradle.kts | 7 +- ...ldlogic.java-common-conventions.gradle.kts | 88 ++++++++++++++++--- jabgui/build.gradle.kts | 13 ++- jabkit/build.gradle.kts | 10 +-- jablib/build.gradle.kts | 20 ++--- jablib/src/main/java/module-info.java | 2 +- jabsrv/build.gradle.kts | 9 +- test-support/build.gradle.kts | 10 +-- 8 files changed, 101 insertions(+), 58 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index f814f2bde98..deab330318f 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -9,10 +9,11 @@ repositories { } dependencies { - implementation("org.gradlex:java-module-testing:1.7") - implementation("org.gradlex:java-module-dependencies:1.9") implementation("org.gradlex:extra-java-module-info:1.12") - implementation("org.openjfx:javafx-plugin:0.1.0") + implementation("org.gradlex:java-module-dependencies:1.9") + implementation("org.gradlex:java-module-packaging:1.0") + implementation("org.gradlex:java-module-testing:1.7") + implementation("org.gradlex.jvm-dependency-conflict-detection:org.gradlex.jvm-dependency-conflict-detection.gradle.plugin:2.3") configurations .matching { it.name.contains("downloadSources") } diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index a6c7dc8bd8f..803cfc6baa1 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -8,9 +8,9 @@ plugins { id("project-report") id("org.gradlex.extra-java-module-info") + id("org.gradlex.java-module-packaging") id("org.gradlex.java-module-testing") - - id("org.openjfx.javafxplugin") + id("org.gradlex.jvm-dependency-conflict-detection") } repositories { @@ -31,40 +31,100 @@ dependencies { } } +javaModulePackaging { + target("ubuntu-22.04") { + operatingSystem = OperatingSystemFamily.LINUX + architecture = MachineArchitecture.X86_64 + packageTypes = listOf("deb") + } + target("macos-13") { + operatingSystem = OperatingSystemFamily.MACOS + architecture = MachineArchitecture.X86_64 + packageTypes = listOf("dmg") + } + target("macos-14") { + operatingSystem = OperatingSystemFamily.MACOS + architecture = MachineArchitecture.ARM64 + packageTypes = listOf("dmg") + } + target("windows-2022") { + operatingSystem = OperatingSystemFamily.WINDOWS + architecture = MachineArchitecture.X86_64 + packageTypes = listOf("exe") + } + + primaryTarget(target("macos-14")) +} + +jvmDependencyConflicts.patch { + listOf("base", "graphics", "controls", "fxml", "swing").forEach { jfxModule -> + module("org.openjfx:javafx-$jfxModule") { + addTargetPlatformVariant("linux", OperatingSystemFamily.LINUX, MachineArchitecture.X86_64) + addTargetPlatformVariant("linux-aarch64", OperatingSystemFamily.LINUX, MachineArchitecture.ARM64) + addTargetPlatformVariant("mac", OperatingSystemFamily.MACOS, MachineArchitecture.X86_64) + addTargetPlatformVariant("mac-aarch64", OperatingSystemFamily.MACOS, MachineArchitecture.ARM64) + addTargetPlatformVariant("win", OperatingSystemFamily.WINDOWS, MachineArchitecture.X86_64) + } + } +} + extraJavaModuleInfo { failOnMissingModuleInfo = false failOnAutomaticModules = false // skipLocalJars = true deriveAutomaticModuleNamesFromFileNames = true module("org.openjfx:javafx-base", "javafx.base") { + overrideModuleName() preserveExisting() + /* exports("com.sun.javafx.event") - opens("javafx.collections", "javafx.collections.transformation") + exports("com.sun.javafx.collections") + exports("com.sun.javafx.runtime") + opens("javafx.collections") + opens("javafx.collections.transformation") + */ } module("org.openjfx:javafx-controls", "javafx.controls") { + overrideModuleName() preserveExisting() + /* exports("com.sun.javafx.scene.control") exports("com.sun.javafx.scene.control.behavior") exports("com.sun.javafx.scene.control.inputmat") opens("javafx.scene.control", "com.sun.javafx.scene.control", "javafx.scene.control.skin") + */ } - module("org.openjfx:javafx-graphics", "org.controlsfx.controls") { - preserveExisting() + //module("org.openjfx:javafx-graphics", "javafx.graphics") { + //overrideModuleName() + //preserveExisting() + /* exports("com.sun.javafx.scene") exports("com.sun.javafx.scene.traversal") exports("com.sun.javafx.css") - } - module("org.openjfx:javafx-base", "org.controlsfx.controls") { + */ + //} + module("org.openjfx:javafx-graphics", "javafx.fxml") { + overrideModuleName() preserveExisting() - exports("com.sun.javafx.event") - exports("com.sun.javafx.collections") - exports("com.sun.javafx.runtime") } - module("org.controlsfx:controlsfx", "controlsfx") { - preserveExisting() - opens("impl.org.controlsfx.skin") - exports("impl.org.controlsfx.skin") + + /* + // Based on module-info.class in https://repo1.maven.org/maven2/org/controlsfx/controlsfx/11.2.2/ + module("org.openjfx:javafx-controls", "org.controlsfx.controls") { + patchRealModule() + + exportAllPackages() // shortcut to just export everything, can be replaced with a dedicated list + + opens("org.controlsfx.control", "org.controlsfx.fxsampler") + opens("org.controlsfx.control.tableview2", "org.controlsfx.fxsampler"); + opens("impl.org.controlsfx.skin"); + + uses("org.controlsfx.glyphfont.GlyphFont"); + + // Automatically reconstructed from META-INF + // provides org.controlsfx.glyphfont.GlyphFont with org.controlsfx.glyphfont.FontAwesome; } + */ } testing { diff --git a/jabgui/build.gradle.kts b/jabgui/build.gradle.kts index 0fef8ae1bb9..1908b337ddd 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -1,5 +1,4 @@ import org.gradle.internal.os.OperatingSystem -import org.gradle.kotlin.dsl.annotationProcessor plugins { id("buildlogic.java-common-conventions") @@ -21,6 +20,12 @@ val pdfbox = "3.0.5" dependencies { implementation(project(":jablib")) + implementation("org.openjfx:javafx-base:24.0.1") + implementation("org.openjfx:javafx-graphics:24.0.1") + implementation("org.openjfx:javafx-fxml:24.0.1") + implementation("org.openjfx:javafx-web:24.0.1") + implementation("org.openjfx:javafx-swing:24.0.1") + implementation("org.slf4j:slf4j-api:2.0.17") implementation("org.tinylog:tinylog-api:2.7.0") implementation("org.tinylog:slf4j-tinylog:2.7.0") @@ -130,12 +135,6 @@ dependencies { testImplementation("com.github.javaparser:javaparser-symbol-solver-core:3.26.4") } -javafx { - version = "24" - // javafx.swing required by com.dlsc.gemsfx - modules = listOf("javafx.base", "javafx.graphics", "javafx.fxml", "javafx.web", "javafx.swing") -} - application { mainClass.set("org.jabref.Launcher") mainModule.set("org.jabref") diff --git a/jabkit/build.gradle.kts b/jabkit/build.gradle.kts index 27d795fb340..728329b28d6 100644 --- a/jabkit/build.gradle.kts +++ b/jabkit/build.gradle.kts @@ -19,6 +19,10 @@ dependencies { exclude( group = "org.openjfx") } + implementation("org.openjfx:javafx-base:24.0.1") + implementation("org.openjfx:javafx-controls:24.0.1") + implementation("org.openjfx:javafx-fxml:24.0.1") + implementation("info.picocli:picocli:4.7.7") annotationProcessor("info.picocli:picocli-codegen:4.7.7") @@ -63,12 +67,6 @@ jacoco { } */ -javafx { - version = "24" - // because of afterburner.fx - modules = listOf("javafx.base", "javafx.controls", "javafx.fxml") -} - application { mainClass.set("org.jabref.JabKit") mainModule.set("org.jabref.jabkit") diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index 270752ce380..61790c89ba6 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -21,6 +21,11 @@ val jaxbVersion by extra { "4.0.5" } dependencies { implementation(fileTree(mapOf("dir" to("lib"), "includes" to listOf("*.jar")))) + implementation("org.openjfx:javafx-base:24.0.1") + // implementation("org.openjfx:javafx-graphics:24.0.1") + implementation("org.openjfx:javafx-fxml:24.0.1") + implementation("org.openjfx:javafx-controls:24.0.1") + // We do not use [Version Catalogs](https://docs.gradle.org/current/userguide/version_catalogs.html#sec:dependency-bundles), because // exclusions are not supported @@ -227,21 +232,6 @@ dependencies { "xjc"("org.glassfish.jaxb:jaxb-xjc:$jaxbVersion") "xjc"("org.glassfish.jaxb:jaxb-runtime:$jaxbVersion") } - -javafx { - version = "24" - modules = listOf( - // properties - "javafx.base", - // javafx.scene.paint.Color; - "javafx.graphics", - - // because of afterburner.fx - "javafx.controls", - "javafx.fxml" - ) -} - /* jacoco { toolVersion = "0.8.13" diff --git a/jablib/src/main/java/module-info.java b/jablib/src/main/java/module-info.java index cb91d76d1f2..f14cf708e69 100644 --- a/jablib/src/main/java/module-info.java +++ b/jablib/src/main/java/module-info.java @@ -104,7 +104,7 @@ exports org.jabref.logic.git; requires javafx.base; - requires javafx.graphics; + // requires javafx.graphics; requires afterburner.fx; requires com.tobiasdiez.easybind; diff --git a/jabsrv/build.gradle.kts b/jabsrv/build.gradle.kts index 3a72d557bad..9661f87ca28 100644 --- a/jabsrv/build.gradle.kts +++ b/jabsrv/build.gradle.kts @@ -63,6 +63,9 @@ dependencies { implementation("org.jabref:afterburner.fx:2.0.0") { exclude( group = "org.openjfx") } + implementation("org.openjfx:javafx-base:24.0.1") + implementation("org.openjfx:javafx-controls:24.0.1") + implementation("org.openjfx:javafx-fxml:24.0.1") implementation("net.harawata:appdirs:1.4.0") @@ -76,12 +79,6 @@ dependencies { testImplementation("net.bytebuddy:byte-buddy:1.17.5") } -javafx { - version = "24" - // because of afterburner.fx - modules = listOf("javafx.base", "javafx.controls", "javafx.fxml") -} - tasks.test { testLogging { // set options for log level LIFECYCLE diff --git a/test-support/build.gradle.kts b/test-support/build.gradle.kts index 12c8edd0a34..ef1f75ab11a 100644 --- a/test-support/build.gradle.kts +++ b/test-support/build.gradle.kts @@ -5,6 +5,10 @@ plugins { dependencies { implementation(project(":jablib")) + implementation("org.openjfx:javafx-base:24.0.1") + implementation("org.openjfx:javafx-controls:24.0.1") + implementation("org.openjfx:javafx-fxml:24.0.1") + implementation("org.slf4j:slf4j-api:2.0.17") implementation("org.tinylog:tinylog-api:2.7.0") implementation("org.tinylog:slf4j-tinylog:2.7.0") @@ -23,9 +27,3 @@ dependencies { implementation("org.jspecify:jspecify:1.0.0") } - -javafx { - version = "24" - // because of afterburner.fx - modules = listOf("javafx.base", "javafx.controls", "javafx.fxml") -} From 9d396892c80fa5b6683352453d36c3fa319f3a3c Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Thu, 15 May 2025 17:16:16 +0200 Subject: [PATCH 12/29] Try to fix compilation --- build-logic/build.gradle.kts | 2 +- .../buildlogic.java-common-conventions.gradle.kts | 15 +++++++++++---- jabgui/src/main/java/module-info.java | 5 +++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index deab330318f..195be844847 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -13,7 +13,7 @@ dependencies { implementation("org.gradlex:java-module-dependencies:1.9") implementation("org.gradlex:java-module-packaging:1.0") implementation("org.gradlex:java-module-testing:1.7") - implementation("org.gradlex.jvm-dependency-conflict-detection:org.gradlex.jvm-dependency-conflict-detection.gradle.plugin:2.3") + implementation("org.gradlex.jvm-dependency-conflict-resolution:org.gradlex.jvm-dependency-conflict-resolution.gradle.plugin:2.3") configurations .matching { it.name.contains("downloadSources") } diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 803cfc6baa1..09f5dca25f9 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -10,7 +10,7 @@ plugins { id("org.gradlex.extra-java-module-info") id("org.gradlex.java-module-packaging") id("org.gradlex.java-module-testing") - id("org.gradlex.jvm-dependency-conflict-detection") + id("org.gradlex.jvm-dependency-conflict-resolution") } repositories { @@ -52,12 +52,11 @@ javaModulePackaging { architecture = MachineArchitecture.X86_64 packageTypes = listOf("exe") } - - primaryTarget(target("macos-14")) + // primaryTarget(target("macos-14")) } jvmDependencyConflicts.patch { - listOf("base", "graphics", "controls", "fxml", "swing").forEach { jfxModule -> + listOf("base", "controls", "fxml", "graphics", "swing", "web").forEach { jfxModule -> module("org.openjfx:javafx-$jfxModule") { addTargetPlatformVariant("linux", OperatingSystemFamily.LINUX, MachineArchitecture.X86_64) addTargetPlatformVariant("linux-aarch64", OperatingSystemFamily.LINUX, MachineArchitecture.ARM64) @@ -73,6 +72,7 @@ extraJavaModuleInfo { failOnAutomaticModules = false // skipLocalJars = true deriveAutomaticModuleNamesFromFileNames = true + /* module("org.openjfx:javafx-base", "javafx.base") { overrideModuleName() preserveExisting() @@ -84,6 +84,9 @@ extraJavaModuleInfo { opens("javafx.collections.transformation") */ } + + */ + /* module("org.openjfx:javafx-controls", "javafx.controls") { overrideModuleName() preserveExisting() @@ -94,6 +97,8 @@ extraJavaModuleInfo { opens("javafx.scene.control", "com.sun.javafx.scene.control", "javafx.scene.control.skin") */ } + + */ //module("org.openjfx:javafx-graphics", "javafx.graphics") { //overrideModuleName() //preserveExisting() @@ -103,10 +108,12 @@ extraJavaModuleInfo { exports("com.sun.javafx.css") */ //} + /* module("org.openjfx:javafx-graphics", "javafx.fxml") { overrideModuleName() preserveExisting() } + */ /* // Based on module-info.class in https://repo1.maven.org/maven2/org/controlsfx/controlsfx/11.2.2/ diff --git a/jabgui/src/main/java/module-info.java b/jabgui/src/main/java/module-info.java index 6667d904fba..8f15c4b4c3f 100644 --- a/jabgui/src/main/java/module-info.java +++ b/jabgui/src/main/java/module-info.java @@ -10,10 +10,11 @@ // region JavaFX requires javafx.base; - requires javafx.graphics; requires javafx.controls; - requires javafx.web; requires javafx.fxml; + requires javafx.graphics; + requires javafx.web; + requires com.tobiasdiez.easybind; requires afterburner.fx; From 4d654defbbd8e9b2e505df5283d7a32542d78aca Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Thu, 15 May 2025 21:36:56 +0200 Subject: [PATCH 13/29] jabgui: Compiler error: error: cannot access EventTarget --- ...ldlogic.java-common-conventions.gradle.kts | 41 +++++++++++++++---- jabgui/build.gradle.kts | 14 ++++--- jabkit/build.gradle.kts | 10 +++-- jablib/build.gradle.kts | 21 ++++++---- jablib/src/main/java/module-info.java | 2 +- jabsrv/build.gradle.kts | 9 ++-- test-support/build.gradle.kts | 9 ++-- 7 files changed, 73 insertions(+), 33 deletions(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 09f5dca25f9..21a008ab049 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -31,6 +31,9 @@ dependencies { } } +/* +// Source: https://github.com/jjohannes/java-module-system/blob/main/gradle/plugins/src/main/kotlin/targets.gradle.kts +// Configure variants for OS javaModulePackaging { target("ubuntu-22.04") { operatingSystem = OperatingSystemFamily.LINUX @@ -54,7 +57,10 @@ javaModulePackaging { } // primaryTarget(target("macos-14")) } +*/ +// Tell gradle which jar to use for which platform +// Source: https://github.com/jjohannes/java-module-system/blob/be19f6c088dca511b6d9a7487dacf0b715dbadc1/gradle/plugins/src/main/kotlin/metadata-patch.gradle.kts#L14-L22 jvmDependencyConflicts.patch { listOf("base", "controls", "fxml", "graphics", "swing", "web").forEach { jfxModule -> module("org.openjfx:javafx-$jfxModule") { @@ -65,8 +71,27 @@ jvmDependencyConflicts.patch { addTargetPlatformVariant("win", OperatingSystemFamily.WINDOWS, MachineArchitecture.X86_64) } } + // Source: https://github.com/jjohannes/java-module-system/blob/be19f6c088dca511b6d9a7487dacf0b715dbadc1/gradle/plugins/src/main/kotlin/metadata-patch.gradle.kts#L9 + module("com.google.guava:guava") { + removeDependency("com.google.code.findbugs:jsr305") + removeDependency("org.checkerframework:checker-qual") + removeDependency("com.google.errorprone:error_prone_annotations") + } +} + +val os = org.gradle.internal.os.OperatingSystem.current() +val arch = System.getProperty("os.arch") +val javafxPlatform = when { + os.isWindows -> "win" + os.isMacOsX && arch == "aarch64" -> "mac-aarch64" + os.isMacOsX -> "mac" + os.isLinux && arch == "aarch64" -> "linux-aarch64" + os.isLinux -> "linux" + else -> error("Unsupported OS/arch: ${os.name} / $arch") } +project.extra["javafxPlatform"] = javafxPlatform + extraJavaModuleInfo { failOnMissingModuleInfo = false failOnAutomaticModules = false @@ -86,19 +111,17 @@ extraJavaModuleInfo { } */ - /* module("org.openjfx:javafx-controls", "javafx.controls") { overrideModuleName() preserveExisting() - /* exports("com.sun.javafx.scene.control") + /* exports("com.sun.javafx.scene.control.behavior") exports("com.sun.javafx.scene.control.inputmat") opens("javafx.scene.control", "com.sun.javafx.scene.control", "javafx.scene.control.skin") */ } - */ //module("org.openjfx:javafx-graphics", "javafx.graphics") { //overrideModuleName() //preserveExisting() @@ -115,23 +138,23 @@ extraJavaModuleInfo { } */ - /* // Based on module-info.class in https://repo1.maven.org/maven2/org/controlsfx/controlsfx/11.2.2/ - module("org.openjfx:javafx-controls", "org.controlsfx.controls") { + module("org.openjfx:javafx-controls", "javafx.controls") { + overrideModuleName() + patchRealModule() exportAllPackages() // shortcut to just export everything, can be replaced with a dedicated list - opens("org.controlsfx.control", "org.controlsfx.fxsampler") - opens("org.controlsfx.control.tableview2", "org.controlsfx.fxsampler"); + // opens("org.controlsfx.control", "org.controlsfx.fxsampler") + // opens("org.controlsfx.control.tableview2", "org.controlsfx.fxsampler"); opens("impl.org.controlsfx.skin"); - uses("org.controlsfx.glyphfont.GlyphFont"); + // uses("org.controlsfx.glyphfont.GlyphFont"); // Automatically reconstructed from META-INF // provides org.controlsfx.glyphfont.GlyphFont with org.controlsfx.glyphfont.FontAwesome; } - */ } testing { diff --git a/jabgui/build.gradle.kts b/jabgui/build.gradle.kts index 1908b337ddd..3519bec8cc2 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -17,14 +17,18 @@ version = project.findProperty("projVersion") ?: "100.0.0" val luceneVersion = "10.2.1" val pdfbox = "3.0.5" +val javafxVersion = "24.0.1" +val javafxPlatform: String by project.extra + dependencies { implementation(project(":jablib")) - implementation("org.openjfx:javafx-base:24.0.1") - implementation("org.openjfx:javafx-graphics:24.0.1") - implementation("org.openjfx:javafx-fxml:24.0.1") - implementation("org.openjfx:javafx-web:24.0.1") - implementation("org.openjfx:javafx-swing:24.0.1") + implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-graphics:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-web:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-swing:$javafxVersion:$javafxPlatform") implementation("org.slf4j:slf4j-api:2.0.17") implementation("org.tinylog:tinylog-api:2.7.0") diff --git a/jabkit/build.gradle.kts b/jabkit/build.gradle.kts index 728329b28d6..29c1f42abea 100644 --- a/jabkit/build.gradle.kts +++ b/jabkit/build.gradle.kts @@ -11,6 +11,9 @@ version = project.findProperty("projVersion") ?: "100.0.0" val luceneVersion = "10.2.1" +val javafxVersion = "24.0.1" +val javafxPlatform: String by project.extra + dependencies { implementation(project(":jablib")) @@ -19,9 +22,10 @@ dependencies { exclude( group = "org.openjfx") } - implementation("org.openjfx:javafx-base:24.0.1") - implementation("org.openjfx:javafx-controls:24.0.1") - implementation("org.openjfx:javafx-fxml:24.0.1") + implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") + // implementation("org.openjfx:javafx-graphics:$javafxVersion:$javafxPlatform") implementation("info.picocli:picocli:4.7.7") annotationProcessor("info.picocli:picocli-codegen:4.7.7") diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index 61790c89ba6..979325731a1 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -18,13 +18,21 @@ val pdfbox = "3.0.5" val luceneVersion = "10.2.1" val jaxbVersion by extra { "4.0.5" } +val javafxVersion = "24.0.1" +val javafxPlatform: String by project.extra + dependencies { implementation(fileTree(mapOf("dir" to("lib"), "includes" to listOf("*.jar")))) - implementation("org.openjfx:javafx-base:24.0.1") - // implementation("org.openjfx:javafx-graphics:24.0.1") - implementation("org.openjfx:javafx-fxml:24.0.1") - implementation("org.openjfx:javafx-controls:24.0.1") + implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") + + // Required by afterburner.fx + implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-graphics:$javafxVersion:$javafxPlatform") + + // Fix "error: module not found: javafx.controls" during compilation + // implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") // We do not use [Version Catalogs](https://docs.gradle.org/current/userguide/version_catalogs.html#sec:dependency-bundles), because // exclusions are not supported @@ -391,11 +399,6 @@ tasks.javadoc { encoding = "UTF-8" // version = false // author = false - - addMultilineStringsOption("-add-exports").value = listOf( - "javafx.controls/com.sun.javafx.scene.control=org.jabref", - "org.controlsfx.controls/impl.org.controlsfx.skin=org.jabref" - ) } } diff --git a/jablib/src/main/java/module-info.java b/jablib/src/main/java/module-info.java index f14cf708e69..aa87ce4ea7a 100644 --- a/jablib/src/main/java/module-info.java +++ b/jablib/src/main/java/module-info.java @@ -104,7 +104,7 @@ exports org.jabref.logic.git; requires javafx.base; - // requires javafx.graphics; + requires javafx.graphics; // because of javafx.scene.paint.Color requires afterburner.fx; requires com.tobiasdiez.easybind; diff --git a/jabsrv/build.gradle.kts b/jabsrv/build.gradle.kts index 9661f87ca28..5667afe9c95 100644 --- a/jabsrv/build.gradle.kts +++ b/jabsrv/build.gradle.kts @@ -15,6 +15,9 @@ application{ ) } +val javafxVersion = "24.0.1" +val javafxPlatform: String by project.extra + dependencies { implementation(project(":jablib")) @@ -63,9 +66,9 @@ dependencies { implementation("org.jabref:afterburner.fx:2.0.0") { exclude( group = "org.openjfx") } - implementation("org.openjfx:javafx-base:24.0.1") - implementation("org.openjfx:javafx-controls:24.0.1") - implementation("org.openjfx:javafx-fxml:24.0.1") + implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") implementation("net.harawata:appdirs:1.4.0") diff --git a/test-support/build.gradle.kts b/test-support/build.gradle.kts index ef1f75ab11a..40bbbc0abd8 100644 --- a/test-support/build.gradle.kts +++ b/test-support/build.gradle.kts @@ -2,12 +2,15 @@ plugins { id("buildlogic.java-common-conventions") } +val javafxVersion = "24.0.1" +val javafxPlatform: String by project.extra + dependencies { implementation(project(":jablib")) - implementation("org.openjfx:javafx-base:24.0.1") - implementation("org.openjfx:javafx-controls:24.0.1") - implementation("org.openjfx:javafx-fxml:24.0.1") + implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") implementation("org.slf4j:slf4j-api:2.0.17") implementation("org.tinylog:tinylog-api:2.7.0") From 27e7063d7217511540435a8d1ec22eccd6eae58f Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Thu, 15 May 2025 21:57:20 +0200 Subject: [PATCH 14/29] Add debug output --- jabgui/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jabgui/build.gradle.kts b/jabgui/build.gradle.kts index 3519bec8cc2..616a65dfa70 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -20,6 +20,8 @@ val pdfbox = "3.0.5" val javafxVersion = "24.0.1" val javafxPlatform: String by project.extra +println("JavaFX platform: $javafxPlatform") + dependencies { implementation(project(":jablib")) From 5163061376429620fbb4306adf7d305ea5e6de75 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Fri, 16 May 2025 23:29:57 +0200 Subject: [PATCH 15/29] Remove unused plugin --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 21a008ab049..d4154d0ecde 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -8,7 +8,6 @@ plugins { id("project-report") id("org.gradlex.extra-java-module-info") - id("org.gradlex.java-module-packaging") id("org.gradlex.java-module-testing") id("org.gradlex.jvm-dependency-conflict-resolution") } From 8c2d981c783079e5040b00d1f119556b563633b7 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Thu, 22 May 2025 00:00:47 +0200 Subject: [PATCH 16/29] WIP --- ...ldlogic.java-common-conventions.gradle.kts | 88 +++++++++++-------- gradle.properties | 5 +- jabgui/build.gradle.kts | 3 +- jablib/src/main/java/module-info.java | 2 + 4 files changed, 58 insertions(+), 40 deletions(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index d4154d0ecde..9c8f29dbd6f 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -10,6 +10,7 @@ plugins { id("org.gradlex.extra-java-module-info") id("org.gradlex.java-module-testing") id("org.gradlex.jvm-dependency-conflict-resolution") + id("org.gradlex.java-module-packaging") } repositories { @@ -30,7 +31,18 @@ dependencies { } } -/* +val os = org.gradle.internal.os.OperatingSystem.current() + +val osTarget = when { + os.isMacOsX -> { + val osVersion = System.getProperty("os.version") + if (osVersion.startsWith("14")) "macos-14" else "macos-123" + } + os.isLinux -> "ubuntu-22.04" + os.isWindows -> "windows-2022" + else -> error("Unsupported OS") +} + // Source: https://github.com/jjohannes/java-module-system/blob/main/gradle/plugins/src/main/kotlin/targets.gradle.kts // Configure variants for OS javaModulePackaging { @@ -54,9 +66,8 @@ javaModulePackaging { architecture = MachineArchitecture.X86_64 packageTypes = listOf("exe") } - // primaryTarget(target("macos-14")) + primaryTarget(target(osTarget)) } -*/ // Tell gradle which jar to use for which platform // Source: https://github.com/jjohannes/java-module-system/blob/be19f6c088dca511b6d9a7487dacf0b715dbadc1/gradle/plugins/src/main/kotlin/metadata-patch.gradle.kts#L14-L22 @@ -78,7 +89,6 @@ jvmDependencyConflicts.patch { } } -val os = org.gradle.internal.os.OperatingSystem.current() val arch = System.getProperty("os.arch") val javafxPlatform = when { os.isWindows -> "win" @@ -96,46 +106,42 @@ extraJavaModuleInfo { failOnAutomaticModules = false // skipLocalJars = true deriveAutomaticModuleNamesFromFileNames = true + /* module("org.openjfx:javafx-base", "javafx.base") { overrideModuleName() - preserveExisting() - /* - exports("com.sun.javafx.event") - exports("com.sun.javafx.collections") - exports("com.sun.javafx.runtime") - opens("javafx.collections") - opens("javafx.collections.transformation") - */ + patchRealModule() + exportAllPackages() } + */ - */ - module("org.openjfx:javafx-controls", "javafx.controls") { + module("org.openjfx:javafx-graphics", "javafx.graphics") { overrideModuleName() - preserveExisting() - exports("com.sun.javafx.scene.control") - /* - exports("com.sun.javafx.scene.control.behavior") - exports("com.sun.javafx.scene.control.inputmat") - opens("javafx.scene.control", "com.sun.javafx.scene.control", "javafx.scene.control.skin") - */ + patchRealModule() + exportAllPackages() + + requires("java.dekstop") + requires("javafx.base") } - //module("org.openjfx:javafx-graphics", "javafx.graphics") { - //overrideModuleName() - //preserveExisting() - /* - exports("com.sun.javafx.scene") - exports("com.sun.javafx.scene.traversal") - exports("com.sun.javafx.css") - */ - //} - /* - module("org.openjfx:javafx-graphics", "javafx.fxml") { - overrideModuleName() - preserveExisting() + module("org.controlsfx:controlsfx", "org.controlsfx.controls") { + // overrideModuleName() + patchRealModule() + + exports("impl.org.controlsfx.skin") + exports("org.controlsfx.control") + exports("org.controlsfx.control.action") + exports("org.controlsfx.control.decoration") + exports("org.controlsfx.control.table") + exports("org.controlsfx.control.textfield") + exports("org.controlsfx.dialog") + exports("org.controlsfx.validation") + exports("org.controlsfx.validation.decoration") + + requires("javafx.base") + requires("javafx.controls") + requires("javafx.graphics") } - */ // Based on module-info.class in https://repo1.maven.org/maven2/org/controlsfx/controlsfx/11.2.2/ module("org.openjfx:javafx-controls", "javafx.controls") { @@ -143,12 +149,22 @@ extraJavaModuleInfo { patchRealModule() - exportAllPackages() // shortcut to just export everything, can be replaced with a dedicated list + // exportAllPackages() // shortcut to just export everything, can be replaced with a dedicated list + exports("com.sun.javafx.scene.control") + exports("javafx.scene.chart") + exports("javafx.scene.control") + exports("javafx.scene.control.cell") + exports("javafx.scene.control.skin") + exports("javafx.scene.control.table") // opens("org.controlsfx.control", "org.controlsfx.fxsampler") // opens("org.controlsfx.control.tableview2", "org.controlsfx.fxsampler"); opens("impl.org.controlsfx.skin"); + requires("javafx.base"); + requires("javafx.controls"); + requires("javafx.graphics"); + // uses("org.controlsfx.glyphfont.GlyphFont"); // Automatically reconstructed from META-INF diff --git a/gradle.properties b/gradle.properties index d0df6eb37db..76ad19e7741 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,9 +5,8 @@ org.gradle.vs.watch=true org.gradle.jvmargs=-Xmx6096M # hint by https://docs.gradle.org/current/userguide/performance.html#enable_configuration_cache -# Does not work: -# - Task `:compileJava` of type `org.gradle.api.tasks.compile.JavaCompile`: cannot serialize object of type 'org.gradle.api.internal.project.DefaultProject', a subtype of 'org.gradle.api.Project', as these are not supported with the configuration cache. -# org.gradle.configuration-cache=false +# Currently does not work as "Invocation of 'Task.project' by task ':jablib:schemaGen_org-jabref-logic-importer-fileformat-citavi' at execution time is unsupported." +# org.gradle.configuration-cache=true # hint by https://docs.gradle.org/current/userguide/performance.html#enable_the_build_cache org.gradle.caching=true diff --git a/jabgui/build.gradle.kts b/jabgui/build.gradle.kts index d97d7baac63..9252d03c20e 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -28,9 +28,10 @@ dependencies { implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") + // implementation("org.openjfx:javafx-graphics:24.0.1:win") implementation("org.openjfx:javafx-graphics:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-web:$javafxVersion:$javafxPlatform") implementation("org.openjfx:javafx-swing:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-web:$javafxVersion:$javafxPlatform") implementation("org.slf4j:slf4j-api:2.0.17") implementation("org.tinylog:tinylog-api:2.7.0") diff --git a/jablib/src/main/java/module-info.java b/jablib/src/main/java/module-info.java index 5e95fd48ba1..00ff0172139 100644 --- a/jablib/src/main/java/module-info.java +++ b/jablib/src/main/java/module-info.java @@ -103,6 +103,8 @@ exports org.jabref.logic.crawler; exports org.jabref.logic.git; + requires java.base; + requires javafx.base; requires javafx.graphics; // because of javafx.scene.paint.Color requires afterburner.fx; From bd209b5c94879d348c23989c6983e94a3feb32bc Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Thu, 22 May 2025 00:03:31 +0200 Subject: [PATCH 17/29] Disable graphics "rewrite" --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 9c8f29dbd6f..ca5e49ffb3d 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -113,7 +113,6 @@ extraJavaModuleInfo { patchRealModule() exportAllPackages() } - */ module("org.openjfx:javafx-graphics", "javafx.graphics") { overrideModuleName() @@ -123,6 +122,7 @@ extraJavaModuleInfo { requires("java.dekstop") requires("javafx.base") } + */ module("org.controlsfx:controlsfx", "org.controlsfx.controls") { // overrideModuleName() From 3f3e38e2dbc9549aaadcca55cec5d317a0c07e5b Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Thu, 29 May 2025 18:15:00 +0200 Subject: [PATCH 18/29] Streamline JavaFX variant handling --- ...ldlogic.java-common-conventions.gradle.kts | 41 ++++--------------- jabgui/build.gradle.kts | 30 ++++++++------ jabkit/build.gradle.kts | 15 ++++--- jablib/build.gradle.kts | 10 ++--- .../org/jabref/customPreferences.xml | 18 -------- jabsrv-cli/build.gradle.kts | 14 +++---- jabsrv/build.gradle.kts | 12 ++++-- test-support/build.gradle.kts | 6 +-- 8 files changed, 59 insertions(+), 87 deletions(-) delete mode 100644 jablib/src/test/resources/org/jabref/customPreferences.xml diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index d3d11aa28e6..588dec8207e 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -36,7 +36,7 @@ val os = org.gradle.internal.os.OperatingSystem.current() val osTarget = when { os.isMacOsX -> { val osVersion = System.getProperty("os.version") - if (osVersion.startsWith("14")) "macos-14" else "macos-123" + if (osVersion.startsWith("14")) "macos-14" else "macos-13" } os.isLinux -> "ubuntu-22.04" os.isWindows -> "windows-2022" @@ -72,8 +72,9 @@ javaModulePackaging { // Tell gradle which jar to use for which platform // Source: https://github.com/jjohannes/java-module-system/blob/be19f6c088dca511b6d9a7487dacf0b715dbadc1/gradle/plugins/src/main/kotlin/metadata-patch.gradle.kts#L14-L22 jvmDependencyConflicts.patch { - listOf("base", "controls", "fxml", "graphics", "swing", "web").forEach { jfxModule -> + listOf("base", "controls", "fxml", "graphics", "swing", "web", "media").forEach { jfxModule -> module("org.openjfx:javafx-$jfxModule") { + addTargetPlatformVariant("", "none", "none") // matches the empty Jars: to get better errors addTargetPlatformVariant("linux", OperatingSystemFamily.LINUX, MachineArchitecture.X86_64) addTargetPlatformVariant("linux-aarch64", OperatingSystemFamily.LINUX, MachineArchitecture.ARM64) addTargetPlatformVariant("mac", OperatingSystemFamily.MACOS, MachineArchitecture.X86_64) @@ -89,18 +90,6 @@ jvmDependencyConflicts.patch { } } -val arch = System.getProperty("os.arch") -val javafxPlatform = when { - os.isWindows -> "win" - os.isMacOsX && arch == "aarch64" -> "mac-aarch64" - os.isMacOsX -> "mac" - os.isLinux && arch == "aarch64" -> "linux-aarch64" - os.isLinux -> "linux" - else -> error("Unsupported OS/arch: ${os.name} / $arch") -} - -project.extra["javafxPlatform"] = javafxPlatform - extraJavaModuleInfo { failOnMissingModuleInfo = false failOnAutomaticModules = false @@ -125,7 +114,6 @@ extraJavaModuleInfo { */ module("org.controlsfx:controlsfx", "org.controlsfx.controls") { - // overrideModuleName() patchRealModule() exports("impl.org.controlsfx.skin") @@ -143,32 +131,19 @@ extraJavaModuleInfo { requires("javafx.graphics") } - // Based on module-info.class in https://repo1.maven.org/maven2/org/controlsfx/controlsfx/11.2.2/ module("org.openjfx:javafx-controls", "javafx.controls") { - overrideModuleName() - patchRealModule() - // exportAllPackages() // shortcut to just export everything, can be replaced with a dedicated list - exports("com.sun.javafx.scene.control") + requiresTransitive("javafx.base"); + requiresTransitive("javafx.graphics"); + exports("javafx.scene.chart") exports("javafx.scene.control") exports("javafx.scene.control.cell") exports("javafx.scene.control.skin") - exports("javafx.scene.control.table") - - // opens("org.controlsfx.control", "org.controlsfx.fxsampler") - // opens("org.controlsfx.control.tableview2", "org.controlsfx.fxsampler"); - opens("impl.org.controlsfx.skin"); - - requires("javafx.base"); - requires("javafx.controls"); - requires("javafx.graphics"); - // uses("org.controlsfx.glyphfont.GlyphFont"); - - // Automatically reconstructed from META-INF - // provides org.controlsfx.glyphfont.GlyphFont with org.controlsfx.glyphfont.FontAwesome; + // PATCH REASON: + exports("com.sun.javafx.scene.control") } } diff --git a/jabgui/build.gradle.kts b/jabgui/build.gradle.kts index 8716df81542..bcef1a3661a 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -19,20 +19,17 @@ val luceneVersion = "10.2.1" val pdfbox = "3.0.5" val javafxVersion = "24.0.1" -val javafxPlatform: String by project.extra - -println("JavaFX platform: $javafxPlatform") dependencies { implementation(project(":jablib")) - implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") - // implementation("org.openjfx:javafx-graphics:24.0.1:win") - implementation("org.openjfx:javafx-graphics:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-swing:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-web:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-base:$javafxVersion") + implementation("org.openjfx:javafx-controls:$javafxVersion") + implementation("org.openjfx:javafx-fxml:$javafxVersion") + // implementation("org.openjfx:javafx-graphics:24.0.1") + implementation("org.openjfx:javafx-graphics:$javafxVersion") + implementation("org.openjfx:javafx-swing:$javafxVersion") + implementation("org.openjfx:javafx-web:$javafxVersion") implementation("org.slf4j:slf4j-api:2.0.17") implementation("org.tinylog:tinylog-api:2.7.0") @@ -437,6 +434,15 @@ if (OperatingSystem.current().isWindows) { javaModuleTesting.whitebox(testing.suites["test"]) { requires.add("org.junit.jupiter.api") - // opensTo.add("org.junit.platform.commons") <-- opensTo 'org.junit.platform.commons' is done by default - // exportsTo.add("...") + requires.add("org.junit.jupiter.params") + requires.add("org.mockito") + requires.add("org.jabref.testsupport") +} + +tasks.test { + jvmArgs = listOf( + "--add-opens", "javafx.graphics/com.sun.javafx.application=org.testfx", + "--add-reads", "org.mockito=java.prefs", + "--add-reads", "org.mockito=javafx.scene", + ) } diff --git a/jabkit/build.gradle.kts b/jabkit/build.gradle.kts index 61289a47b9d..5dccab19a5f 100644 --- a/jabkit/build.gradle.kts +++ b/jabkit/build.gradle.kts @@ -12,7 +12,6 @@ version = project.findProperty("projVersion") ?: "100.0.0" val luceneVersion = "10.2.1" val javafxVersion = "24.0.1" -val javafxPlatform: String by project.extra dependencies { implementation(project(":jablib")) @@ -22,10 +21,10 @@ dependencies { exclude( group = "org.openjfx") } - implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") - // implementation("org.openjfx:javafx-graphics:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-base:$javafxVersion") + implementation("org.openjfx:javafx-controls:$javafxVersion") + implementation("org.openjfx:javafx-fxml:$javafxVersion") + // implementation("org.openjfx:javafx-graphics:$javafxVersion") implementation("info.picocli:picocli:4.7.7") annotationProcessor("info.picocli:picocli-codegen:4.7.7") @@ -65,6 +64,12 @@ dependencies { testImplementation("net.bytebuddy:byte-buddy:1.17.5") } +javaModuleTesting.whitebox(testing.suites["test"]) { + requires.add("org.junit.jupiter.api") + requires.add("org.jabref.testsupport") + requires.add("org.mockito") +} + /* jacoco { toolVersion = "0.8.13" diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index ce7276e11d4..376cec6c166 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -35,15 +35,15 @@ val javafxPlatform: String by project.extra dependencies { implementation(fileTree(mapOf("dir" to("lib"), "includes" to listOf("*.jar")))) - implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-base:$javafxVersion") // Required by afterburner.fx - implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-graphics:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-controls:$javafxVersion") + implementation("org.openjfx:javafx-fxml:$javafxVersion") + implementation("org.openjfx:javafx-graphics:$javafxVersion") // Fix "error: module not found: javafx.controls" during compilation - // implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") + // implementation("org.openjfx:javafx-controls:$javafxVersion") // We do not use [Version Catalogs](https://docs.gradle.org/current/userguide/version_catalogs.html#sec:dependency-bundles), because // exclusions are not supported diff --git a/jablib/src/test/resources/org/jabref/customPreferences.xml b/jablib/src/test/resources/org/jabref/customPreferences.xml deleted file mode 100644 index 0fe49c32c45..00000000000 --- a/jablib/src/test/resources/org/jabref/customPreferences.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jabsrv-cli/build.gradle.kts b/jabsrv-cli/build.gradle.kts index e6156de2482..f0ecee786f6 100644 --- a/jabsrv-cli/build.gradle.kts +++ b/jabsrv-cli/build.gradle.kts @@ -5,8 +5,6 @@ plugins { application - id("org.openjfx.javafxplugin") version("0.1.0") - id("org.beryx.jlink") version "3.1.1" id("org.kordamp.gradle.jdeps") version "0.20.0" @@ -27,10 +25,16 @@ application{ ) } +val javafxVersion = "24.0.1" + dependencies { implementation(project(":jablib")) implementation(project(":jabsrv")) + implementation("org.openjfx:javafx-controls:${javafxVersion}") + implementation("org.openjfx:javafx-fxml:${javafxVersion}") + implementation ("org.openjfx:javafx-graphics:${javafxVersion}") + implementation("org.slf4j:slf4j-api:2.0.17") implementation("org.tinylog:slf4j-tinylog:2.7.0") implementation("org.tinylog:tinylog-impl:2.7.0") @@ -101,12 +105,6 @@ dependencies { // endregion } -javafx { - version = "24" - // because of afterburner.fx - modules = listOf("javafx.base", "javafx.controls", "javafx.fxml") -} - tasks.test { testLogging { // set options for log level LIFECYCLE diff --git a/jabsrv/build.gradle.kts b/jabsrv/build.gradle.kts index cac5ee21422..3766335e966 100644 --- a/jabsrv/build.gradle.kts +++ b/jabsrv/build.gradle.kts @@ -49,9 +49,9 @@ dependencies { implementation("org.jabref:afterburner.fx:2.0.0") { exclude( group = "org.openjfx") } - implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-base:$javafxVersion") + implementation("org.openjfx:javafx-controls:$javafxVersion") + implementation("org.openjfx:javafx-fxml:$javafxVersion") implementation("net.harawata:appdirs:1.4.0") @@ -73,6 +73,12 @@ dependencies { } +javaModuleTesting.whitebox(testing.suites["test"]) { + requires.add("org.junit.jupiter.api") + requires.add("org.mockito") + requires.add("jul.to.slf4j") +} + tasks.test { testLogging { // set options for log level LIFECYCLE diff --git a/test-support/build.gradle.kts b/test-support/build.gradle.kts index 45ae4aea141..67c50592910 100644 --- a/test-support/build.gradle.kts +++ b/test-support/build.gradle.kts @@ -8,9 +8,9 @@ val javafxPlatform: String by project.extra dependencies { implementation(project(":jablib")) - implementation("org.openjfx:javafx-base:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-controls:$javafxVersion:$javafxPlatform") - implementation("org.openjfx:javafx-fxml:$javafxVersion:$javafxPlatform") + implementation("org.openjfx:javafx-base:$javafxVersion") + implementation("org.openjfx:javafx-controls:$javafxVersion") + implementation("org.openjfx:javafx-fxml:$javafxVersion") implementation("org.slf4j:slf4j-api:2.0.17") implementation("org.tinylog:tinylog-api:2.7.0") From b8d7de4168ff0113b36c2df344f619f98f82d0f5 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 31 May 2025 23:57:39 +0200 Subject: [PATCH 19/29] Fix exports for jabgui --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 588dec8207e..ebb81df4c1d 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -96,13 +96,14 @@ extraJavaModuleInfo { // skipLocalJars = true deriveAutomaticModuleNamesFromFileNames = true - /* module("org.openjfx:javafx-base", "javafx.base") { overrideModuleName() patchRealModule() + // jabgui requires at least "javafx.collections" exportAllPackages() } +/* module("org.openjfx:javafx-graphics", "javafx.graphics") { overrideModuleName() patchRealModule() From fd6aa07ddc57e25379ffb904a9572c84beab32ff Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 00:23:26 +0200 Subject: [PATCH 20/29] More dependencies --- .../kotlin/buildlogic.java-common-conventions.gradle.kts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index ebb81df4c1d..b04fcae8bd1 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -103,16 +103,15 @@ extraJavaModuleInfo { exportAllPackages() } -/* + // required for testing module("org.openjfx:javafx-graphics", "javafx.graphics") { overrideModuleName() patchRealModule() exportAllPackages() - requires("java.dekstop") - requires("javafx.base") + requiresTransitive("javafx.base") + requiresTransitive("java.desktop") } - */ module("org.controlsfx:controlsfx", "org.controlsfx.controls") { patchRealModule() From db223476f98466eb6eb622749a3c02b3429eb6a1 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 00:57:48 +0200 Subject: [PATCH 21/29] Add one more dependency --- .../buildlogic.java-common-conventions.gradle.kts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index b04fcae8bd1..239b007a386 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -103,6 +103,16 @@ extraJavaModuleInfo { exportAllPackages() } + // required for testing of jablib + module("org.openjfx:javafx-fxml", "javafx.fxml") { + overrideModuleName() + patchRealModule() + exportAllPackages() + + requiresTransitive("javafx.base") + requiresTransitive("java.desktop") + } + // required for testing module("org.openjfx:javafx-graphics", "javafx.graphics") { overrideModuleName() From 6dbf25d44b2512a9f831b36d521c54472e4d1a63 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 00:58:13 +0200 Subject: [PATCH 22/29] OpenRewrite... --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 239b007a386..6d49b2cdd36 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -1,3 +1,5 @@ +import org.gradle.internal.os.OperatingSystem + plugins { java @@ -31,7 +33,7 @@ dependencies { } } -val os = org.gradle.internal.os.OperatingSystem.current() +val os = OperatingSystem.current() val osTarget = when { os.isMacOsX -> { From 0686ec5e3e178a3fe6c8c343ee8518a28f54b5ca Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 01:05:23 +0200 Subject: [PATCH 23/29] Exclude all kotlin from openrewrite --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6d60df1c34b..b563571507f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,11 +26,11 @@ rewrite { activeRecipe("org.jabref.config.rewrite.cleanup") exclusion( "settings.gradle", - "**/build.gradle.kts", "**/generated-sources/**", "**/src/main/resources/**", "**/src/test/resources/**", "**/module-info.java", + "**/*.kts", "**/*.py", "**/*.xml", "**/*.yml" From 910f6c23dc5fe122b67d08e349e677798562bee0 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 01:15:29 +0200 Subject: [PATCH 24/29] Remove some "--add-opens" --- jabgui/src/test/java/module-info.test | 5 ----- jablib/src/test/java/module-info.test | 7 ------- 2 files changed, 12 deletions(-) diff --git a/jabgui/src/test/java/module-info.test b/jabgui/src/test/java/module-info.test index 405ea82b367..f39494d4f8a 100644 --- a/jabgui/src/test/java/module-info.test +++ b/jabgui/src/test/java/module-info.test @@ -5,14 +5,9 @@ // Make testfx module visible org.jabref=org.testfx.junit5 ---add-opens - javafx.base/com.sun.javafx.beans=net.bytebuddy --add-opens // Needed for GUI tests javafx.graphics/com.sun.javafx.application=org.testfx ---add-opens - // Needed for localization tests - javafx.fxml/javafx.fxml=org.jabref --add-modules io.github.classgraph diff --git a/jablib/src/test/java/module-info.test b/jablib/src/test/java/module-info.test index 6927d4c0824..363b3d39f82 100644 --- a/jablib/src/test/java/module-info.test +++ b/jablib/src/test/java/module-info.test @@ -1,10 +1,3 @@ ---add-opens - javafx.base/com.sun.javafx.beans=net.bytebuddy - ---add-opens - // Needed for localization tests - javafx.fxml/javafx.fxml=org.jabref - --add-modules io.github.classgraph --add-reads From 878026579989b3ad8173d431eff881f598a5c6eb Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 01:16:56 +0200 Subject: [PATCH 25/29] Fix requirements --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 6d49b2cdd36..0ed09b02151 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -112,6 +112,7 @@ extraJavaModuleInfo { exportAllPackages() requiresTransitive("javafx.base") + requiresTransitive("javafx.graphics") requiresTransitive("java.desktop") } From 10a56cd5ef4978c7ba21e7e8b4d3da8755195a9f Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 01:37:44 +0200 Subject: [PATCH 26/29] Try to remove "module-info.test" --- jabgui/src/test/java/module-info.test | 29 --------------------------- jabkit/src/test/java/module-info.test | 4 ---- jablib/build.gradle.kts | 4 ---- jablib/src/test/java/module-info.test | 9 --------- jabsrv/src/test/java/module-info.test | 4 ---- 5 files changed, 50 deletions(-) delete mode 100644 jabgui/src/test/java/module-info.test delete mode 100644 jabkit/src/test/java/module-info.test delete mode 100644 jablib/src/test/java/module-info.test delete mode 100644 jabsrv/src/test/java/module-info.test diff --git a/jabgui/src/test/java/module-info.test b/jabgui/src/test/java/module-info.test deleted file mode 100644 index f39494d4f8a..00000000000 --- a/jabgui/src/test/java/module-info.test +++ /dev/null @@ -1,29 +0,0 @@ ---add-modules - // Add junit5 testfx module dependency - org.testfx.junit5 ---add-reads - // Make testfx module visible - org.jabref=org.testfx.junit5 - ---add-opens - // Needed for GUI tests - javafx.graphics/com.sun.javafx.application=org.testfx - ---add-modules - io.github.classgraph ---add-reads - org.jabref=io.github.classgraph - ---add-modules - org.kordamp.ikonli.core,org.kordamp.ikonli.javafx,org.kordamp.ikonli.materialdesign2 - ---add-reads - org.mockito=java.prefs - ---add-modules - org.jabref.testsupport ---add-reads - org.jabref=org.jabref.testsupport - ---add-exports - javafx.controls/com.sun.javafx.scene.control=org.jabref diff --git a/jabkit/src/test/java/module-info.test b/jabkit/src/test/java/module-info.test deleted file mode 100644 index b71b3333ffe..00000000000 --- a/jabkit/src/test/java/module-info.test +++ /dev/null @@ -1,4 +0,0 @@ ---add-modules - org.jabref.testsupport ---add-reads - org.jabref.jabkit=org.jabref.testsupport diff --git a/jablib/build.gradle.kts b/jablib/build.gradle.kts index 376cec6c166..268fa48ea22 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -537,10 +537,6 @@ javaModuleTesting.whitebox(testing.suites["test"]) { requires.add("org.jabref.testsupport") requires.add("org.mockito") - // --add-opens - opensTo.add("javafx.base/com.sun.javafx.beans=net.bytebuddy") - opensTo.add("javafx.fxml/javafx.fxml=org.jabref") - // --add-reads //reads.add("org.jabref.jablib=io.github.classgraph") //reads.add("org.jabref.jablib=org.jabref.testsupport") diff --git a/jablib/src/test/java/module-info.test b/jablib/src/test/java/module-info.test deleted file mode 100644 index 363b3d39f82..00000000000 --- a/jablib/src/test/java/module-info.test +++ /dev/null @@ -1,9 +0,0 @@ ---add-modules - io.github.classgraph ---add-reads - org.jabref.jablib=io.github.classgraph - ---add-modules - org.jabref.testsupport ---add-reads - org.jabref.jablib=org.jabref.testsupport diff --git a/jabsrv/src/test/java/module-info.test b/jabsrv/src/test/java/module-info.test deleted file mode 100644 index e444321f8f8..00000000000 --- a/jabsrv/src/test/java/module-info.test +++ /dev/null @@ -1,4 +0,0 @@ ---add-modules - jul.to.slf4j ---add-reads - org.jabref.jabsrv=jul.to.slf4j From 9e5d72ac23f1de9bd32a0d0a1017dba639c2108e Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 01:39:28 +0200 Subject: [PATCH 27/29] Remove two non-(yet-)needed gradlex plugins --- build-logic/build.gradle.kts | 2 -- 1 file changed, 2 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 195be844847..62e6ba6162a 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -10,8 +10,6 @@ repositories { dependencies { implementation("org.gradlex:extra-java-module-info:1.12") - implementation("org.gradlex:java-module-dependencies:1.9") - implementation("org.gradlex:java-module-packaging:1.0") implementation("org.gradlex:java-module-testing:1.7") implementation("org.gradlex.jvm-dependency-conflict-resolution:org.gradlex.jvm-dependency-conflict-resolution.gradle.plugin:2.3") From 96490cd10b31c8c4d02367b52acde893af851958 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 01:46:07 +0200 Subject: [PATCH 28/29] Add missing gradlex module --- build-logic/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 62e6ba6162a..3af2eafe5d3 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -10,6 +10,7 @@ repositories { dependencies { implementation("org.gradlex:extra-java-module-info:1.12") + implementation("org.gradlex:java-module-packaging:1.0") // required for platform-specific packaging of JavaFX dependencies implementation("org.gradlex:java-module-testing:1.7") implementation("org.gradlex.jvm-dependency-conflict-resolution:org.gradlex.jvm-dependency-conflict-resolution.gradle.plugin:2.3") From 67f4fe83a1aa7f950b3f2ad38c97bd9009fa5302 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 1 Jun 2025 02:14:42 +0200 Subject: [PATCH 29/29] Add missing requirement --- .../main/kotlin/buildlogic.java-common-conventions.gradle.kts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts index 0ed09b02151..5e3f649a1e8 100644 --- a/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.java-common-conventions.gradle.kts @@ -107,7 +107,6 @@ extraJavaModuleInfo { // required for testing of jablib module("org.openjfx:javafx-fxml", "javafx.fxml") { - overrideModuleName() patchRealModule() exportAllPackages() @@ -118,12 +117,12 @@ extraJavaModuleInfo { // required for testing module("org.openjfx:javafx-graphics", "javafx.graphics") { - overrideModuleName() patchRealModule() exportAllPackages() requiresTransitive("javafx.base") requiresTransitive("java.desktop") + requiresTransitive("jdk.unsupported") } module("org.controlsfx:controlsfx", "org.controlsfx.controls") {