У меня есть абстрактный класс в моей программе как таковойКомпиляция исходного Scala в строке во время выполнения
abstract class Deployment {
/**
* Defines a logger to be used by the deployment script
*/
protected val logger = LoggerFactory.getLogger(this.getClass)
/**
* Defines the entry point to the deployment
*
* @throws java.lang.Exception Thrown on the event of an unrecoverable error
*/
def run(): Unit
}
И когда я пытаюсь загружать классы они находятся в своей исходной форме, так что я скомпилировать их на нагрузке, как так
val scriptFile = new File("testing.scala")
val mirror = universe.runtimeMirror(getClass.getClassLoader)
val toolBox = mirror.mkToolBox()
val parsedScript = toolBox.parse(Source.fromURI(scriptFile.toURI).mkString)
val compiledScript = toolBox.eval(parsedScript)
val deployment = compiledScript.asInstanceOf[Deployment]
deployment.run()
И это тестовый файл
import au.com.cleanstream.kumo.deploy.Deployment
class testing extends Deployment {
override def run(): Unit = {
logger.info("TEST")
}
}
Но когда я запускаю код я получаю java.lang.AssertionError: assertion failed
, Я тоже устал toolBox.compile(parsedScript)
, но получил то же самое.
Любая помощь очень ценится!
Спасибо так много, оглядываясь назад на это он делает гораздо больше смысла! –
Да, гораздо больше смысла! и я хотел бы добавить, что это можно использовать анонимный объект здесь, '' 'нового Deployment { переопределения Защиты запуск(): Unit = { logger.info ("TEST") }} // end' '' – pzy