diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 58a475186fc..3af2eafe5d3 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -9,6 +9,11 @@ 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") + 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 fc167d3b86f..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 @@ -1,3 +1,5 @@ +import org.gradle.internal.os.OperatingSystem + plugins { java @@ -6,6 +8,11 @@ plugins { // id("jacoco") id("project-report") + + 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 { @@ -26,10 +33,136 @@ dependencies { } } +val os = OperatingSystem.current() + +val osTarget = when { + os.isMacOsX -> { + val osVersion = System.getProperty("os.version") + if (osVersion.startsWith("14")) "macos-14" else "macos-13" + } + 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 { + 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(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 +jvmDependencyConflicts.patch { + 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) + addTargetPlatformVariant("mac-aarch64", OperatingSystemFamily.MACOS, MachineArchitecture.ARM64) + 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") + } +} + +extraJavaModuleInfo { + failOnMissingModuleInfo = false + failOnAutomaticModules = false + // skipLocalJars = true + deriveAutomaticModuleNamesFromFileNames = true + + module("org.openjfx:javafx-base", "javafx.base") { + overrideModuleName() + patchRealModule() + // jabgui requires at least "javafx.collections" + exportAllPackages() + } + + // required for testing of jablib + module("org.openjfx:javafx-fxml", "javafx.fxml") { + patchRealModule() + exportAllPackages() + + requiresTransitive("javafx.base") + requiresTransitive("javafx.graphics") + requiresTransitive("java.desktop") + } + + // required for testing + module("org.openjfx:javafx-graphics", "javafx.graphics") { + patchRealModule() + exportAllPackages() + + requiresTransitive("javafx.base") + requiresTransitive("java.desktop") + requiresTransitive("jdk.unsupported") + } + + module("org.controlsfx:controlsfx", "org.controlsfx.controls") { + 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") + } + + module("org.openjfx:javafx-controls", "javafx.controls") { + patchRealModule() + + requiresTransitive("javafx.base"); + requiresTransitive("javafx.graphics"); + + exports("javafx.scene.chart") + exports("javafx.scene.control") + exports("javafx.scene.control.cell") + exports("javafx.scene.control.skin") + + // PATCH REASON: + exports("com.sun.javafx.scene.control") + } +} + testing { suites { val test by getting(JvmTestSuite::class) { - useJUnitJupiter("5.12.2") + useJUnitJupiter() } } } diff --git a/build.gradle.kts b/build.gradle.kts index fcfc2b4785b..b563571507f 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 @@ -29,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" @@ -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/gradle.properties b/gradle.properties index 3229d15ce56..56df967caa5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,9 +5,8 @@ org.gradle.vfs.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 828ec69ee80..bcef1a3661a 100644 --- a/jabgui/build.gradle.kts +++ b/jabgui/build.gradle.kts @@ -1,15 +1,11 @@ import org.gradle.internal.os.OperatingSystem -import org.javamodularity.moduleplugin.extensions.CompileModuleOptions -import org.javamodularity.moduleplugin.extensions.RunModuleOptions plugins { id("buildlogic.java-common-conventions") 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" @@ -22,9 +18,19 @@ version = project.findProperty("projVersion") ?: "100.0.0" val luceneVersion = "10.2.1" val pdfbox = "3.0.5" +val javafxVersion = "24.0.1" + dependencies { implementation(project(":jablib")) + 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") implementation("org.tinylog:slf4j-tinylog:2.7.0") @@ -134,12 +140,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") @@ -183,10 +183,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" @@ -200,65 +196,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" ) - ) } } @@ -286,7 +227,8 @@ jlink { "zip-6", "--no-header-files", "--no-man-pages", - "--bind-services" + "--bind-services", + "--add-modules", "jdk.incubator.vector" ) launcher { @@ -489,3 +431,18 @@ if (OperatingSystem.current().isWindows) { } } } + +javaModuleTesting.whitebox(testing.suites["test"]) { + requires.add("org.junit.jupiter.api") + 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/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; diff --git a/jabgui/src/test/java/module-info.test b/jabgui/src/test/java/module-info.test deleted file mode 100644 index 405ea82b367..00000000000 --- a/jabgui/src/test/java/module-info.test +++ /dev/null @@ -1,34 +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 - 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 ---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/build.gradle.kts b/jabkit/build.gradle.kts index ced6de6d288..5dccab19a5f 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" } @@ -14,6 +11,8 @@ version = project.findProperty("projVersion") ?: "100.0.0" val luceneVersion = "10.2.1" +val javafxVersion = "24.0.1" + dependencies { implementation(project(":jablib")) @@ -22,6 +21,11 @@ dependencies { exclude( group = "org.openjfx") } + 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") @@ -60,18 +64,18 @@ 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" } */ -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") @@ -104,7 +108,8 @@ jlink { "zip-6", "--no-header-files", "--no-man-pages", - "--bind-services" + "--bind-services", + "--add-modules", "jdk.incubator.vector" ) launcher { @@ -113,7 +118,6 @@ jlink { // TODO: Remove as soon as dependencies are fixed (upstream) forceMerge( - "controlsfx", "bcprov", "jaxb", "istack", 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 84d8c3ee24e..268fa48ea22 100644 --- a/jablib/build.gradle.kts +++ b/jablib/build.gradle.kts @@ -15,8 +15,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" id("com.vanniktech.maven.publish") version "0.32.0" @@ -31,9 +29,22 @@ if (project.findProperty("tagbuild")?.toString() != "true") { version += "-SNAPSHOT" } +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:$javafxVersion") + + // Required by afterburner.fx + 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") + // We do not use [Version Catalogs](https://docs.gradle.org/current/userguide/version_catalogs.html#sec:dependency-bundles), because // exclusions are not supported @@ -236,21 +247,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" @@ -405,29 +401,18 @@ 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" + // version = false + // author = false } } -*/ tasks.test { useJUnitPlatform { excludeTags("DatabaseTest", "FetcherTest") } - - extensions.configure("moduleOptions") { - // TODO: Remove this as soon as ArchUnit is modularized - runOnClasspath = true - } } jmh { @@ -544,3 +529,15 @@ tasks.named("sourcesJar") { tasks.withType { suppressedValidationErrors.add("enforced-platform") } + +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-reads + //reads.add("org.jabref.jablib=io.github.classgraph") + //reads.add("org.jabref.jablib=org.jabref.testsupport") +} diff --git a/jablib/src/main/java/module-info.java b/jablib/src/main/java/module-info.java index 19dfa41e807..5c7b240c32f 100644 --- a/jablib/src/main/java/module-info.java +++ b/jablib/src/main/java/module-info.java @@ -104,8 +104,10 @@ exports org.jabref.logic.crawler; exports org.jabref.logic.git; + requires java.base; + 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/jablib/src/test/java/module-info.test b/jablib/src/test/java/module-info.test deleted file mode 100644 index 6927d4c0824..00000000000 --- a/jablib/src/test/java/module-info.test +++ /dev/null @@ -1,16 +0,0 @@ ---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 - org.jabref.jablib=io.github.classgraph - ---add-modules - org.jabref.testsupport ---add-reads - org.jabref.jablib=org.jabref.testsupport 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 d3a1439c2f6..3766335e966 100644 --- a/jabsrv/build.gradle.kts +++ b/jabsrv/build.gradle.kts @@ -4,10 +4,11 @@ plugins { id("buildlogic.java-common-conventions") `java-library` - - id("org.openjfx.javafxplugin") version("0.1.0") } +val javafxVersion = "24.0.1" +val javafxPlatform: String by project.extra + dependencies { api(project(":jablib")) @@ -48,6 +49,9 @@ dependencies { implementation("org.jabref:afterburner.fx:2.0.0") { exclude( group = "org.openjfx") } + 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") @@ -69,10 +73,10 @@ dependencies { } -javafx { - version = "24" - // because of afterburner.fx - modules = listOf("javafx.base", "javafx.controls", "javafx.fxml") +javaModuleTesting.whitebox(testing.suites["test"]) { + requires.add("org.junit.jupiter.api") + requires.add("org.mockito") + requires.add("jul.to.slf4j") } tasks.test { 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 diff --git a/settings.gradle.kts b/settings.gradle.kts index a7af5902bc0..e0e189e6a4b 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", "jabsrv-cli", "test-support") + +// https://github.com/gradlex-org/java-module-dependencies#plugin-dependency +includeBuild(".") diff --git a/test-support/build.gradle.kts b/test-support/build.gradle.kts index adebd1dd8e7..67c50592910 100644 --- a/test-support/build.gradle.kts +++ b/test-support/build.gradle.kts @@ -1,12 +1,17 @@ plugins { id("buildlogic.java-common-conventions") - - id("org.openjfx.javafxplugin") version("0.1.0") } +val javafxVersion = "24.0.1" +val javafxPlatform: String by project.extra + dependencies { implementation(project(":jablib")) + 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") implementation("org.tinylog:slf4j-tinylog:2.7.0") @@ -25,9 +30,3 @@ dependencies { implementation("org.jspecify:jspecify:1.0.0") } - -javafx { - version = "24" - // because of afterburner.fx - modules = listOf("javafx.base", "javafx.controls", "javafx.fxml") -}