Fix entries closing on saving compiled script to jar:
also adding a short sleep in tests, otherwise in some cases the classloader was not able to find class in the jar. Fixes script to jar saving tests on windows
This commit is contained in:
+3
@@ -112,6 +112,7 @@ class ScriptingHostTest : TestCase() {
|
|||||||
val compilationConfiguration = createJvmCompilationConfigurationFromTemplate<SimpleScriptTemplate>()
|
val compilationConfiguration = createJvmCompilationConfigurationFromTemplate<SimpleScriptTemplate>()
|
||||||
val host = BasicJvmScriptingHost(evaluator = BasicJvmScriptJarGenerator(outJar))
|
val host = BasicJvmScriptingHost(evaluator = BasicJvmScriptJarGenerator(outJar))
|
||||||
host.eval("println(\"$greeting\")".toScriptSource(name = "SavedScript.kts"), compilationConfiguration, null).throwOnFailure()
|
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 classloader = URLClassLoader(arrayOf(outJar.toURI().toURL()), ScriptingHostTest::class.java.classLoader)
|
||||||
val scriptClass = classloader.loadClass("SavedScript")
|
val scriptClass = classloader.loadClass("SavedScript")
|
||||||
val output = captureOut {
|
val output = captureOut {
|
||||||
@@ -139,6 +140,8 @@ class ScriptingHostTest : TestCase() {
|
|||||||
saver(compiledScript, ScriptEvaluationConfiguration.Default).throwOnFailure()
|
saver(compiledScript, ScriptEvaluationConfiguration.Default).throwOnFailure()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Thread.sleep(100)
|
||||||
|
|
||||||
val classpathFromJar = run {
|
val classpathFromJar = run {
|
||||||
val manifest = JarFile(outJar).manifest
|
val manifest = JarFile(outJar).manifest
|
||||||
manifest.mainAttributes.getValue("Class-Path").split(" ") // TODO: quoted paths
|
manifest.mainAttributes.getValue("Class-Path").split(" ") // TODO: quoted paths
|
||||||
|
|||||||
+13
-9
@@ -70,19 +70,23 @@ fun KJvmCompiledScript<*>.saveToJar(outputJar: File) {
|
|||||||
putValue("Created-By", "JetBrains Kotlin")
|
putValue("Created-By", "JetBrains Kotlin")
|
||||||
if (dependencies.isNotEmpty()) {
|
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
|
// 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)
|
putValue("Main-Class", scriptClassFQName)
|
||||||
}
|
}
|
||||||
// TODO: fat jar/dependencies
|
JarOutputStream(fileStream, manifest).use { jarStream ->
|
||||||
val jarStream = JarOutputStream(fileStream, manifest)
|
jarStream.putNextEntry(JarEntry(scriptMetadataPath(scriptClassFQName)))
|
||||||
jarStream.putNextEntry(JarEntry(scriptMetadataPath(scriptClassFQName)))
|
jarStream.write(copyWithoutModule().toBytes())
|
||||||
jarStream.write(copyWithoutModule().toBytes())
|
jarStream.closeEntry()
|
||||||
for ((path, bytes) in module.compilerOutputFiles) {
|
for ((path, bytes) in module.compilerOutputFiles) {
|
||||||
jarStream.putNextEntry(JarEntry(path))
|
jarStream.putNextEntry(JarEntry(path))
|
||||||
jarStream.write(bytes)
|
jarStream.write(bytes)
|
||||||
|
jarStream.closeEntry()
|
||||||
|
}
|
||||||
|
jarStream.finish()
|
||||||
|
jarStream.flush()
|
||||||
}
|
}
|
||||||
jarStream.finish()
|
fileStream.flush()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user