Динамическая компиляция файлов классов Scala во время выполнения в Scala 2.11

У меня есть следующий код, который работает в Scala 2.10 для компиляции внешних классов во время выполнения в Scala

/**
  * Compile scala files and keep them loaded in memory
  * @param classDir Directory storing the generated scala files
  * @throws IOException if there is problem reading the source files
  * @return Classloader that contains the compiled external classes
  */
@throws[IOException]
def compileFiles(classDir: String): AbstractFileClassLoader = {
  val files = recursiveListFiles(new File(classDir))
                  .filter(_.getName.endsWith("scala"))
  println("Loaded files: \n" + files.mkString("[", ",\n", "]"))

  val settings: GenericRunnerSettings = new GenericRunnerSettings(err => println("Interpretor error: " + err))
  settings.usejavacp.value = true
  val interpreter: IMain = new IMain(settings)
  files.foreach(f => {
    interpreter.compileSources(new BatchSourceFile(AbstractFile.getFile(f)))
  })

  interpreter.getInterpreterClassLoader()
}

А затем в другом месте я мог бы использовать ссылку на загрузчик классов для создания экземпляров классов, например

val personClass = classLoader.findClass("com.example.dynacsv.PersonData")
val ctor = personClass.getDeclaredConstructors()(0)
val instance = ctor.newInstance("Mr", "John", "Doe", 25: java.lang.Integer, 165: java.lang.Integer, 1: java.lang.Integer)
println("Instantiated class: " + instance.getClass.getCanonicalName)
println(instance.toString)

Однако вышесказанное больше не работает какgetInterpreterClassLoader метод был удален изscala.tools.nsc.interpreter.IMain, Кроме того, AbstractFileClassLoader был перемещен и устарел. Больше не разрешено звонитьfindClass метод в загрузчике классов из внешнего пакета.

Каков рекомендуемый способ сделать это в Scala 2.11? Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос