@@ -3,7 +3,7 @@ import com.google.devtools.ksp.gradle.KspTaskJvm
33import io.github.devcrocod.korro.KorroTask
44import nl.jolanrensen.kodex.gradle.creatingRunKodexTask
55import org.gradle.jvm.tasks.Jar
6- import org.gradle.kotlin.dsl.withType
6+ import org.intellij.lang.annotations.Language
77import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
88
99plugins {
@@ -251,6 +251,53 @@ val changeJarTask by tasks.registering {
251251 }
252252}
253253
254+ // generateLibrariesJson makes sure a META-INF/kotlin-jupyter-libraries/libraries.json file is generated
255+ // This file allows loading dataframe-jupyter when dataframe-core is present on its own in a Kotlin Notebook.
256+ val generatedJupyterResourcesDir = layout.buildDirectory.dir(" generated/jupyter" )
257+ val generateLibrariesJson by tasks.registering {
258+ val outDir = generatedJupyterResourcesDir.get().asFile.resolve(" META-INF/kotlin-jupyter-libraries" )
259+ val outFile = outDir.resolve(" libraries.json" )
260+ outputs.file(outFile)
261+ inputs.property(" version" , project.version)
262+
263+ doLast {
264+ outDir.mkdirs()
265+ @Language(" json" )
266+ val content =
267+ """
268+ {
269+ "descriptors": [
270+ {
271+ "init": [
272+ "USE { dependencies(\"org.jetbrains.kotlinx:dataframe-jupyter:${project.version} \") }"
273+ ]
274+ }
275+ ]
276+ }
277+ """ .trimIndent()
278+
279+ outFile.delete()
280+ outFile.writeText(content)
281+ logger.lifecycle(" generated META-INF/kotlin-jupyter-libraries/libraries.json for :core" )
282+ }
283+ }
284+
285+ // If `includeCoreLibrariesJson` is set, modify the processResources task such that it includes
286+ // a META-INF libraries.json file.
287+ // This file allows loading dataframe-jupyter when dataframe-core is present on its own in a Kotlin Notebook.
288+ // This is usually only done when publishing.
289+ tasks.processResources {
290+ if (project.hasProperty(" includeCoreLibrariesJson" )) {
291+ dependsOn(generateLibrariesJson)
292+ from(generatedJupyterResourcesDir) {
293+ into(" " ) // keep META-INF/... structure as generated
294+ }
295+ doLast {
296+ logger.lifecycle(" $this includes generated META-INF/kotlin-jupyter-libraries/libraries.json" )
297+ }
298+ }
299+ }
300+
254301// if `processKDocsMain` runs, the Jar tasks must run after it so the generated-sources are there
255302tasks.withType<Jar > {
256303 mustRunAfter(changeJarTask, tasks.generateKeywordsSrc, processKDocsMain)
0 commit comments