plugins { java application eclipse `check-lib-versions` id("org.graalvm.buildtools.native") version "0.10.1" } version = "0.13.4-SNAPSHOT" java { sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 toolchain { languageVersion.set(JavaLanguageVersion.of(21)) } } application { mainClass.set("org.asamk.signal.Main") } graalvmNative { binaries { this["main"].run { buildArgs.add("--install-exit-handlers") buildArgs.add("-Dfile.encoding=UTF-8") buildArgs.add("-J-Dfile.encoding=UTF-8") resources.autodetect() configurationFileDirectories.from(file("graalvm-config-dir")) if (System.getenv("GRAALVM_HOME") == null) { toolchainDetection.set(true) javaLauncher.set(javaToolchains.launcherFor { languageVersion.set(JavaLanguageVersion.of(21)) }) } else { toolchainDetection.set(false) } } } } dependencies { implementation(libs.bouncycastle) implementation(libs.jackson.databind) implementation(libs.argparse4j) implementation(libs.dbusjava) implementation(libs.slf4j.api) implementation(libs.slf4j.jul) implementation(libs.logback) implementation(project(":lib")) } configurations { implementation { resolutionStrategy.failOnVersionConflict() } } tasks.withType().configureEach { isPreserveFileTimestamps = false isReproducibleFileOrder = true } tasks.withType { options.encoding = "UTF-8" } tasks.withType { manifest { attributes( "Implementation-Title" to project.name, "Implementation-Version" to project.version, "Main-Class" to application.mainClass.get() ) } } task("fatJar", type = Jar::class) { archiveBaseName.set("${project.name}-fat") exclude( "META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA", "META-INF/NOTICE*", "META-INF/LICENSE*", "META-INF/INDEX.LIST", "**/module-info.class" ) duplicatesStrategy = DuplicatesStrategy.WARN from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) with(tasks.jar.get()) }