Что Intellij делает для меня, что sbt нет?
Я работаю над проектом Scala, для которого я бы хотел поддерживать определяемые пользователем классы плагинов.Я реализовал подкласс ClassLoader:
class PluginLoader(directory: String) extends ClassLoader {
override def findClass(className: String): Class[_] = {
val bytes = loadClassData(className)
defineClass(className,bytes,0,bytes.length)
}
def loadClassData(className: String): Array[Byte] = {
val fileName = className.replace('.',File.separatorChar) + ".class"
val file = new File(directory,fileName)
val bytes = new Array[Byte](file.length.toInt)
val inputStream = new DataInputStream(new FileInputStream(file))
inputStream.readFully(bytes)
inputStream.close()
bytes
}
}
, и я вызываю его с помощью пользовательского каталога и имени предварительно скомпилированного класса scala:
new PluginLoader(directory).loadClass(className).newInstance()
findClass
чтобы успешно найти класс, который предоставляет пользователь.Тем не менее, он вызывается снова в поисках scala.runtime.java8.JFunction2$mcIII$sp.class
.Он смотрит в предоставленный пользователем каталог, поэтому не может найти загруженный класс.
Вот ошибка, которую я получаю: (run-main-0) java.io.FileNotFoundException: ./scala/runtime/java8/JFunction2$mcIII$sp.class (No such file or directory)
Я успешно запустил это приложение в Intellij, что заставляет меняЯ думаю, что мне не хватает какой-то конфигурации в sbt, и Intellij ловит мою ошибку за меня.
Нужно ли мне делать дополнительную настройку?Должен ли я загружать файл JAR целиком, а не просто передавать файл класса?