Kotlin JSR-223 ScriptEngineFactory dentro del contenedor de grasa – No se puede encontrar el comstackdor de kotlin

Tengo un flask gordo donde bash get la instancia de ScriptEngine de Kotlin.

Para fines de debugging, estoy iterando a través de las fábricas disponibles de Script Engine y obteniendo los motores.

 val scriptEngineManager = ScriptEngineManager() for (factory in scriptEngineManager.engineFactories) { val scriptEngine = factory.scriptEngine } 

Cuando golpea el motor de Kotlin, falla con la siguiente exception:

 Exception in thread "main" java.io.FileNotFoundException: Cannot find kotlin compiler jar, set kotlin.compiler.jar property to proper location at org.jetbrains.kotlin.script.jsr223.KotlinJsr223ScriptEngineFactoryExamplesKt$kotlinCompilerJar$2.invoke(KotlinJsr223ScriptEngineFactoryExamples.kt:100) at org.jetbrains.kotlin.script.jsr223.KotlinJsr223ScriptEngineFactoryExamplesKt$kotlinCompilerJar$2.invoke(KotlinJsr223ScriptEngineFactoryExamples.kt) at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:130) at org.jetbrains.kotlin.script.jsr223.KotlinJsr223ScriptEngineFactoryExamplesKt.getKotlinCompilerJar(KotlinJsr223ScriptEngineFactoryExamples.kt) at org.jetbrains.kotlin.script.jsr223.KotlinJsr223ScriptEngineFactoryExamplesKt.access$getKotlinCompilerJar$p(KotlinJsr223ScriptEngineFactoryExamples.kt:1) at org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmDaemonLocalEvalScriptEngineFactory.getScriptEngine(KotlinJsr223ScriptEngineFactoryExamples.kt:56) at davidsiro.invoices.InvoiceGeneratorKt.generateInvoice(invoiceGenerator.kt:16) at davidsiro.invoices.MainKt.main(main.kt:11) 

Mi flask de grasa contiene todas las dependencies (aunque desempaquetadas), incluido el comstackdor de Kotlin. Estoy usando Maven Assembly Plugin para comstackrlo, que se configuró así:

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <archive> <manifest> <mainClass>${main.class}</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </execution> </executions> </plugin> 

¿Algunas ideas?

Actualizar

Para el logging, intenté con KotlinJsr223JvmLocalScriptEngineFactory y KotlinJsr223JvmDaemonLocalEvalScriptEngineFactory con el mismo resultado.

Las fábricas JSR223 en kotlin-script-util están tratando de encontrar el contenedor del comstackdor para configurar la compilation. En su caso, tendrá que escribir su propia fábrica para suministrar explícitamente el classpath de compilation de scripts, por ej.

 class MyScriptEngineFactory : KotlinJsr223JvmScriptEngineFactoryBase() { override fun getScriptEngine(): ScriptEngine = KotlinJsr223JvmLocalScriptEngine( Disposer.newDisposable(), this, classpath, // !!! supply the script classpath here KotlinStandardJsr223ScriptTemplate::class.qualifiedName!!, { ctx, types -> ScriptArgsWithTypes(arrayOf(ctx.getBindings(ScriptContext.ENGINE_SCOPE)), types ?: emptyArray()) }, arrayOf(Bindings::class) ) } 

Debes colocar los siguientes files classpath en classpath :

  • kotlin-script-util.jar – contiene la class de plantilla utilizada como una superclass para el script
  • kotlin-script-runtime.jar – para las classs base utilizadas en el scripting
  • cualquier otra jarra que necesites usar en tus guiones, muy probablemente – kotlin-stdlib.jar

En su lugar, puede poner su tarro de grasa, pero eso significa que todo lo que se encuentre en él será accesible desde sus scripts. No estoy hablando de los gastos generales para el comstackdor.

  • Android Despliegue las fonts de kotlin a un repository de maven
  • ¿Cómo se comstack el proyecto Java + Kotlin con Maven?
  • Intellij Idea no comstackrá kotlin pero maven lo hace
  • Eclipse Aether no resuelve `MÁS RECIENTE` correctamente
  • Javalin tutorial yielding "Referencia sin resolver: AtomicInteger"
  • ¿Kapt es compatible con Maven?
  • Quiero agregar mi versión de kotlin al proyecto Gradel
  • Usando las properties sintéticas de Kotlin
  • Kotlin: ejecuta una testing de integración, el error `diversión principal ya está definido`
  • ¿Puede JRebel volver a cargar las classs de Kotlin cuando son utilizadas por el plugin kotlin-maven-plugin en maven?
  • Dónde poner index.html en un proyecto de Kotlin-js?