在 scala 中通过 Jars 加载 class
Loading class through Jars in scala
我正在尝试从目标 Jar 加载 class,我看到了一些示例并尝试复制,但不幸的是我不能。
我做错了什么:
import java.io.File
import java.net.{URL, URLClassLoader}
val jarPathName = "C:\Users\Pedro Luis\IdeaProjects\Metamorphosis\test\typeLoader\testJars\DummySimpleClass3.jar"
val classLoader = new URLClassLoader(Array[URL](new File(jarPathName).toURI.toURL))
val classToLoad = classLoader.loadClass("DummySimpleClass.scala")
val method = classToLoad.getDeclaredMethod("printer")
val instance = classToLoad.newInstance()
method.invoke(instance)
jar 里面的 class 如下:
package typeLoader.testJars
class DummySimpleClass {
def printer(): Unit = println("Hello World!")
}
我得到的错误是:
java.lang.ClassNotFoundException: scala.typeLoader.testJars.DummySimpleClass.scala
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at efeawfew.JavaTest$.<init>(JavaTest.scala:13)
有什么想法吗?
编辑:添加了 jar 路径
你还需要提到包名
import java.io.File
import java.net.{URL, URLClassLoader}
val jarPathName = "C:\Users\Pedro Luis\IdeaProjects\Metamorphosis\test\typeLoader\testJars\DummySimpleClass3.jar"
val classLoader = new URLClassLoader(Array[URL](new File(jarPathName).toURI.toURL))
val classToLoad = classLoader.loadClass("typeLoader.testJars.DummySimpleClass.scala")
val method = classToLoad.getDeclaredMethod("printer")
val instance = classToLoad.newInstance()
method.invoke(instance)
根据您的屏幕截图,您的 JAR 文件无效,它包含 .scala
文件。实际 JAR 文件必须包含 .class
文件。
我正在尝试从目标 Jar 加载 class,我看到了一些示例并尝试复制,但不幸的是我不能。
我做错了什么:
import java.io.File
import java.net.{URL, URLClassLoader}
val jarPathName = "C:\Users\Pedro Luis\IdeaProjects\Metamorphosis\test\typeLoader\testJars\DummySimpleClass3.jar"
val classLoader = new URLClassLoader(Array[URL](new File(jarPathName).toURI.toURL))
val classToLoad = classLoader.loadClass("DummySimpleClass.scala")
val method = classToLoad.getDeclaredMethod("printer")
val instance = classToLoad.newInstance()
method.invoke(instance)
jar 里面的 class 如下:
package typeLoader.testJars
class DummySimpleClass {
def printer(): Unit = println("Hello World!")
}
我得到的错误是:
java.lang.ClassNotFoundException: scala.typeLoader.testJars.DummySimpleClass.scala
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at efeawfew.JavaTest$.<init>(JavaTest.scala:13)
有什么想法吗?
你还需要提到包名
import java.io.File
import java.net.{URL, URLClassLoader}
val jarPathName = "C:\Users\Pedro Luis\IdeaProjects\Metamorphosis\test\typeLoader\testJars\DummySimpleClass3.jar"
val classLoader = new URLClassLoader(Array[URL](new File(jarPathName).toURI.toURL))
val classToLoad = classLoader.loadClass("typeLoader.testJars.DummySimpleClass.scala")
val method = classToLoad.getDeclaredMethod("printer")
val instance = classToLoad.newInstance()
method.invoke(instance)
根据您的屏幕截图,您的 JAR 文件无效,它包含 .scala
文件。实际 JAR 文件必须包含 .class
文件。