Skip to content

Commit b0b417f

Browse files
authored
Merge pull request #4 from jnorthrup/fix/classnotfound-exception
Fix: Resolve ClassNotFoundException for KTS scripts
2 parents 1507273 + ebe1989 commit b0b417f

2 files changed

Lines changed: 18 additions & 9 deletions

File tree

src/main/kotlin/io/github/kscripting/kscript/code/Templates.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ object Templates {
4848
fun createWrapperForScript(packageName: PackageName, className: String): String {
4949
val classReference = packageName.value + "." + className
5050

51-
return """
51+
var wrapperTemplate = """
5252
|class Main_${className}{
5353
| companion object {
5454
| @JvmStatic
@@ -58,6 +58,12 @@ object Templates {
5858
| }
5959
| }
6060
|}""".trimStart().trimMargin()
61+
62+
if (packageName.value.isNotBlank()) {
63+
wrapperTemplate = "package ${packageName.value};\n\n$wrapperTemplate"
64+
}
65+
66+
return wrapperTemplate
6167
}
6268

6369
fun createRunConfig(rootScriptName: String, rootScriptType: ScriptType, userArgs: List<String>): String {

src/main/kotlin/io/github/kscripting/kscript/creator/JarArtifactCreator.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,20 @@ class JarArtifactCreator(private val executor: Executor) {
4343
scriptContent = "package ${script.packageName.value}\n\n$scriptContent"
4444
}
4545

46-
FileUtils.createFile(scriptFile, scriptContent)
47-
4846
val filesToCompile = mutableSetOf<OsPath>()
49-
filesToCompile.add(scriptFile)
5047

51-
// create main-wrapper for kts scripts
5248
if (script.scriptLocation.scriptType == ScriptType.KTS) {
53-
val wrapper = FileUtils.createFile(
54-
basePath.resolve("$execClassName.kt"), Templates.createWrapperForScript(script.packageName, className)
55-
)
56-
filesToCompile.add(wrapper)
49+
// For KTS scripts, combine script content and wrapper code into a single file.
50+
// The package declaration is handled by Templates.createWrapperForScript.
51+
val wrapperContent = Templates.createWrapperForScript(script.packageName, className)
52+
scriptContent = "$scriptContent\n\n$wrapperContent"
53+
54+
FileUtils.createFile(scriptFile, scriptContent)
55+
filesToCompile.add(scriptFile)
56+
} else {
57+
// For KT files, keep the existing logic.
58+
FileUtils.createFile(scriptFile, scriptContent)
59+
filesToCompile.add(scriptFile)
5760
}
5861

5962
executor.compileKotlin(

0 commit comments

Comments
 (0)