buildscript { repositories { gradlePluginPortal() } dependencies { classpath "io.github.fourlastor:construo:1.5.1" if (enableGraalNative == 'true') { classpath "org.graalvm.buildtools.native:org.graalvm.buildtools.native.gradle.plugin:0.9.28" } } } plugins { id "application" } apply plugin: 'io.github.fourlastor.construo' import io.github.fourlastor.construo.Target sourceSets.main.resources.srcDirs += [rootProject.file('assets').path] mainClassName = 'kz.ilotterytea.frogartha.lwjgl3.Lwjgl3Launcher' application.setMainClass(mainClassName) eclipse.project.name = appName + '-lwjgl3' java.sourceCompatibility = 11 java.targetCompatibility = 11 if (JavaVersion.current().isJava9Compatible()) { compileJava.options.release.set(11) } dependencies { implementation "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion" implementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" implementation "com.crashinvaders.lml:gdx-websocket-common:$gdxWsVersion" implementation project(':core') if (enableGraalNative == 'true') { implementation "io.github.berstanio:gdx-svmhelper-backend-lwjgl3:$graalHelperVersion" } } def os = System.properties['os.name'].toLowerCase() run { workingDir = rootProject.file('assets').path // You can uncomment the next line if your IDE claims a build failure even when the app closed properly. //setIgnoreExitValue(true) if (os.contains('mac')) jvmArgs += "-XstartOnFirstThread" } jar { // sets the name of the .jar file this produces to the name of the game or app, with the version after. archiveFileName.set("${appName}-${projectVersion}.jar") // the duplicatesStrategy matters starting in Gradle 7.0; this setting works. duplicatesStrategy(DuplicatesStrategy.EXCLUDE) dependsOn configurations.runtimeClasspath from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } // these "exclude" lines remove some unnecessary duplicate files in the output JAR. exclude('META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA') dependencies { exclude('META-INF/INDEX.LIST', 'META-INF/maven/**') } // setting the manifest makes the JAR runnable. manifest { attributes 'Main-Class': project.mainClassName } // this last step may help on some OSes that need extra instruction to make runnable JARs. doLast { file(archiveFile).setExecutable(true, false) } } construo { // name of the executable name.set(appName) // human-readable name, used for example in the `.app` name for macOS humanName.set(appName) // Optional, defaults to project version property version.set("$projectVersion") targets.configure { create("linuxX64", Target.Linux) { architecture.set(Target.Architecture.X86_64) jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz") } create("macM1", Target.MacOs) { architecture.set(Target.Architecture.AARCH64) jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.12_7.tar.gz") // macOS needs an identifier identifier.set("kz.ilotterytea.frogartha." + appName) // Optional: icon for macOS macIcon.set(project.file("icons/logo.icns")) } create("macX64", Target.MacOs) { architecture.set(Target.Architecture.X86_64) jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_x64_mac_hotspot_17.0.12_7.tar.gz") // macOS needs an identifier identifier.set("kz.ilotterytea.frogartha." + appName) // Optional: icon for macOS macIcon.set(project.file("icons/logo.icns")) } create("winX64", Target.Windows) { architecture.set(Target.Architecture.X86_64) jdkUrl.set("https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.12%2B7/OpenJDK17U-jdk_x64_windows_hotspot_17.0.12_7.zip") // Uncomment the next line to show a console when the game runs, to print messages. //useConsole.set(true) } } } // Equivalent to the jar task; here for compatibility with gdx-setup. tasks.register('dist') { dependsOn 'jar' } distributions { main { contents { into('libs') { project.configurations.runtimeClasspath.files.findAll { file -> file.getName() != project.tasks.jar.outputs.files.singleFile.name }.each { file -> exclude file.name } } } } } startScripts.dependsOn(':lwjgl3:jar') startScripts.classpath = project.tasks.jar.outputs.files if (enableGraalNative == 'true') { apply from: file("nativeimage.gradle") }