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
  • Referencia no resuelta de Kotlin en time de compilation
  • Sistema local de administración de packages Java en Python PIP style?
  • ¿Es posible mezclar Scala y Kotlin en el mismo module maven?
  • Reduce el time de 'configuration del entorno de compilation' para Kotlin con Maven
  • ¿Cómo se comstack el proyecto Java + Kotlin con Maven?
  • Error al intentar crear una instancia de una class Kotlin de Java
  • Dónde poner index.html en un proyecto de Kotlin-js?
  • Las dependencies de Bintray no se downloadán en InteliJ
  • ¿Cómo hago que IntelliJ respete el directory de salida del complemento Maven Kotlin?
  • ¿Puede JRebel volver a cargar las classs de Kotlin cuando son utilizadas por el plugin kotlin-maven-plugin en maven?