11import  com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask 
2- import  com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar 
32import  org.gradle.internal.os.OperatingSystem 
43import  org.jetbrains.dokka.gradle.DokkaTask 
54import  org.jetbrains.kotlin.gradle.plugin.KotlinCompilationToRunnableFiles 
@@ -30,9 +29,10 @@ val lwjglNatives = when {
3029
3130plugins {
3231    kotlin(" multiplatform" Versions .kotlin
32+     application // to run JVM part
3333    kotlin(" plugin.serialization" Versions .kotlin
3434    id(" org.jetbrains.dokka" Versions .dokka
35-     id(" com.github.johnrengelman.shadow" " 5.2.0" 
35+ //     id("com.github.johnrengelman.shadow") version "5.2.0"
3636    id(" com.github.ben-manes.versions" " 0.29.0" 
3737    id(" maven-publish" 
3838    id(" name.remal.check-dependency-updates" " 1.0.211" 
@@ -51,9 +51,14 @@ group = "org.baaahs"
5151version =  " 0.0.1" 
5252
5353kotlin {
54-     jvm()
54+     jvm {
55+         withJava()
56+     }
57+ 
5558    js {
5659        browser {
60+             binaries.executable()
61+ 
5762            useCommonJs()
5863
5964            webpackTask {
@@ -196,16 +201,27 @@ kotlin {
196201    }
197202}
198203
199- //  workaround for https://youtrack.jetbrains.com/issue/KT-24463:
200- tasks.named<KotlinCompile >(" compileKotlinJvm" 
201-     dependsOn(" :copySheepModel" 
202- }
204+ application {
205+     mainClassName =  " baaahs.PinkyMainKt" 
203206
204- tasks.create<Copy >(" copySheepModel" 
205-     from(" src/commonMain/resources" 
206-     into(" build/classes/kotlin/jvm/main" 
207+     if  (isMac()) {
208+         applicationDefaultJvmArgs =  listOf (
209+             " -XstartOnFirstThread" //  required for OpenGL: https://github.com/LWJGL/lwjgl3/issues/311
210+             " -Djava.awt.headless=true" //  required for Beat Link; otherwise we get this: https://jogamp.org/bugzilla/show_bug.cgi?id=485
211+         )
212+     }
207213}
208214
215+ // // workaround for https://youtrack.jetbrains.com/issue/KT-24463:
216+ // tasks.named<KotlinCompile>("compileKotlinJvm") {
217+ //     dependsOn(":copySheepModel")
218+ // }
219+ 
220+ // tasks.create<Copy>("copySheepModel") {
221+ //     from("src/commonMain/resources")
222+ //     into("build/classes/kotlin/jvm/main")
223+ // }
224+ 
209225tasks.withType(Kotlin2JsCompile ::class ) {
210226    kotlinOptions.sourceMap =  true 
211227    kotlinOptions.sourceMapEmbedSources =  " always" 
@@ -221,7 +237,7 @@ tasks.withType(KotlinCompile::class) {
221237}
222238
223239tasks.named<ProcessResources >(" jsProcessResources" 
224-     dependsOn(" kotlinNpmInstall" //  for node_modules stuff
240+ //     dependsOn("kotlinNpmInstall") // for node_modules stuff
225241
226242    from(" build/js/node_modules/requirejs" " require.js" 
227243    from(" build/js/node_modules/three/build" " three.js" 
@@ -245,9 +261,9 @@ tasks.named<ProcessResources>("jsProcessResources") {
245261}
246262
247263tasks.named<ProcessResources >(" jvmProcessResources" 
248-     dependsOn(" jsBrowserDevelopmentWebpack" 
249- 
250-     from(" build/distributions" " sparklemotion.js" 
264+ //     dependsOn("jsBrowserDevelopmentWebpack")
265+ // 
266+ //     from("build/distributions") { include("sparklemotion.js") }
251267
252268    doLast {
253269        createResourceFilesList(File (buildDir, " processedResources/jvm/main" 
@@ -302,27 +318,43 @@ tasks.create<JavaExec>("runGlslJvmTests") {
302318    }
303319}
304320
305- tasks.create<Copy >(" packageClientResources" 
306-     dependsOn(" jsProcessResources" " jsBrowserWebpack" 
307-     duplicatesStrategy =  DuplicatesStrategy .WARN 
308-     from(project.file(" build/processedResources/js/main" 
309-     from(project.file(" build/distributions" 
310-     into(" build/classes/kotlin/jvm/main/htdocs" 
321+ // tasks.create<Copy>("packageClientResources") {
322+ //     dependsOn("jsProcessResources", "jsBrowserWebpack")
323+ //     duplicatesStrategy = DuplicatesStrategy.WARN
324+ //     from(project.file("build/processedResources/js/main"))
325+ //     from(project.file("build/distributions"))
326+ //     into("build/classes/kotlin/jvm/main/htdocs")
327+ // }
328+ 
329+ // tasks.named<Jar>("jvmJar") {
330+ //     dependsOn("packageClientResources")
331+ //     duplicatesStrategy = DuplicatesStrategy.WARN
332+ // }
333+ 
334+ // // include JS artifacts in any JAR we generate
335+ // tasks.getByName<Jar>("jvmJar") {
336+ //     val taskName = if (project.hasProperty("isProduction")) {
337+ //         "jsBrowserProductionWebpack"
338+ //     } else {
339+ //         "jsBrowserDevelopmentWebpack"
340+ //     }
341+ //     val webpackTask = tasks.getByName<KotlinWebpack>(taskName)
342+ //     dependsOn(webpackTask) // make sure JS gets compiled first
343+ //     from(File(webpackTask.destinationDirectory, webpackTask.outputFileName)) // bring output file along into the JAR
344+ // }
345+ 
346+ tasks.getByName<JavaExec >(" run" 
347+     classpath(tasks.getByName<Jar >(" jvmJar" //  so that the JS artifacts generated by `jvmJar` can be found and served
311348}
312349
313- tasks.named<Jar >(" jvmJar" 
314-     dependsOn(" packageClientResources" 
315-     duplicatesStrategy =  DuplicatesStrategy .WARN 
316- }
317- 
318- tasks.create<ShadowJar >(" shadowJar" 
319-     dependsOn(" jvmJar" 
320-     from(tasks.named<Jar >(" jvmJar" 
321-     configurations =  listOf (project.configurations[" jvmRuntimeClasspath" 
322-     manifest {
323-         attributes[" Main-Class" =  " baaahs.PinkyMainKt" 
324-     }
325- }
350+ // tasks.create<ShadowJar>("shadowJar") {
351+ //     dependsOn("jvmJar")
352+ //     from(tasks.named<Jar>("jvmJar").get().archiveFile)
353+ //     configurations = listOf(project.configurations["jvmRuntimeClasspath"])
354+ //     manifest {
355+ //         attributes["Main-Class"] = "baaahs.PinkyMainKt"
356+ //     }
357+ // }
326358
327359tasks.withType(Test ::class ) {
328360    useJUnitPlatform {
0 commit comments