2015-09-03 3 views
1

У меня есть абстрактный класс в моей программе как таковойКомпиляция исходного 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), но получил то же самое.

Любая помощь очень ценится!

ответ

2

toolBox.eval(parsedScript) возвращается () => Any В Вашем случае тестовый файл возвращает Unit и compiledScript имеет тип BoxedUnit.

Если вы измените тестовый файл, чтобы вернуть некоторое значение, вы сможете получить к нему доступ. я изменил тестовый файл следующим образом:

object Testing extends Deployment { 
    override def run(): Unit = { 
    logger.info("TEST") 
    } 
} 
Testing //This is the SOLUTION 
+0

Спасибо так много, оглядываясь назад на это он делает гораздо больше смысла! –

+1

Да, гораздо больше смысла! и я хотел бы добавить, что это можно использовать анонимный объект здесь, '' 'нового Deployment { переопределения Защиты запуск(): Unit = { logger.info ("TEST") }} // end' '' – pzy

Смежные вопросы