diff --git a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt index 169f93c93e0..b9191381363 100644 --- a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt +++ b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt @@ -112,6 +112,7 @@ class ScriptingHostTest : TestCase() { val compilationConfiguration = createJvmCompilationConfigurationFromTemplate() val host = BasicJvmScriptingHost(evaluator = BasicJvmScriptJarGenerator(outJar)) host.eval("println(\"$greeting\")".toScriptSource(name = "SavedScript.kts"), compilationConfiguration, null).throwOnFailure() + Thread.sleep(100) val classloader = URLClassLoader(arrayOf(outJar.toURI().toURL()), ScriptingHostTest::class.java.classLoader) val scriptClass = classloader.loadClass("SavedScript") val output = captureOut { @@ -139,6 +140,8 @@ class ScriptingHostTest : TestCase() { saver(compiledScript, ScriptEvaluationConfiguration.Default).throwOnFailure() } + Thread.sleep(100) + val classpathFromJar = run { val manifest = JarFile(outJar).manifest manifest.mainAttributes.getValue("Class-Path").split(" ") // TODO: quoted paths diff --git a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptSaving.kt b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptSaving.kt index fa9207c35a4..8f8a7e804f2 100644 --- a/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptSaving.kt +++ b/libraries/scripting/jvm-host/src/kotlin/script/experimental/jvmhost/jvmScriptSaving.kt @@ -70,19 +70,23 @@ fun KJvmCompiledScript<*>.saveToJar(outputJar: File) { putValue("Created-By", "JetBrains Kotlin") if (dependencies.isNotEmpty()) { // TODO: implement options for various cases - paths as is (now), absolute paths (local execution only), names only (most likely as a hint only), fat jar - putValue("Class-Path", dependencies.joinToString(" ")) + putValue("Class-Path", dependencies.joinToString(" ") { it.toURI().toURL().toExternalForm() }) } putValue("Main-Class", scriptClassFQName) } - // TODO: fat jar/dependencies - val jarStream = JarOutputStream(fileStream, manifest) - jarStream.putNextEntry(JarEntry(scriptMetadataPath(scriptClassFQName))) - jarStream.write(copyWithoutModule().toBytes()) - for ((path, bytes) in module.compilerOutputFiles) { - jarStream.putNextEntry(JarEntry(path)) - jarStream.write(bytes) + JarOutputStream(fileStream, manifest).use { jarStream -> + jarStream.putNextEntry(JarEntry(scriptMetadataPath(scriptClassFQName))) + jarStream.write(copyWithoutModule().toBytes()) + jarStream.closeEntry() + for ((path, bytes) in module.compilerOutputFiles) { + jarStream.putNextEntry(JarEntry(path)) + jarStream.write(bytes) + jarStream.closeEntry() + } + jarStream.finish() + jarStream.flush() } - jarStream.finish() + fileStream.flush() } }