У меня есть JAR-файл с java-классами, который я хочу использовать в своем приложении scala. Я не хочу добавлять JAR в папку lib/, потому что я не хочу перестраивать приложение scala каждый раз при изменении JAR.Загрузить класс java в scala во время выполнения
Итак, я попробовал свои силы с помощью scala-отражений и загрузчиков классов, и мне удалось загрузить класс, но я не знаю, как использовать методы класса дальше в моем приложении scala.
Вот моя попытка до сих пор,
scala> var classLoader = new java.net.URLClassLoader(Array(new File("java-module.jar").toURI.toURL),this.getClass.getClassLoader)
classLoader: java.net.URLClassLoader = [email protected]
scala> var javaClass = classLoader.loadClass("com.sample.myClass")
javaClass: Class[_] = class com.sample.myClass
scala> javaClass.getMethods.foreach(println)
public java.lang.String com.sample.myClass.myMethod(java.lang.String)
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
Я хочу использовать метод MyMethod из вновь загруженного класса.
Как я могу пойти дальше, чтобы создать объект этого класса и использовать его методы?
Edit: Добавлен вывод для каждой строки кода выполняется
это не так на многих уровнях ... вы никогда не должны строить с отражением, если можете избежать этого. Используйте maven или sbt и вставьте туда свою зависимость. Ручное здание так же плохо, как здание с отражением. – Chobeat
Мне пришлось держать банку и мое приложение scala отдельно, потому что банка подвержена будущим изменениям, когда мое приложение scala не будет сильно меняться. Поэтому просто перезапуская приложение, я могу вносить изменения, а не перестраивать его каждый раз. – ar7