在scala中通过JAR加载类
我正在尝试从目标Jar加载一个类,我看到了一些示例并尝试复制,但不幸的是我不能 我在这里做错了什么:在scala中通过JAR加载类,scala,urlclassloader,dynamic-class-loaders,Scala,Urlclassloader,Dynamic Class Loaders,我正在尝试从目标Jar加载一个类,我看到了一些示例并尝试复制,但不幸的是我不能 我在这里做错了什么: import java.io.File import java.net.{URL, URLClassLoader} val jarPathName = "C:\\Users\\Pedro Luis\\IdeaProjects\\Metamorphosis\\test\\typeLoader\\testJars\\DummySimpleClass3.jar" val classLoad
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内部的类如下所示:
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)
java.lang.ClassNotFoundException:scala.typeLoader.testJars.DummySimpleClass.scala
位于java.net.URLClassLoader.findClass(URLClassLoader.java:382)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于efeawfew.JavaTest$(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
文件。@PedroCorreiaLuís检查路径…DummySimpleClass3.JAR
,并且它是一个有效的JAR(不确定Windows中路径中的空格)。类名应该没有scala
:classLoader.loadClass(“typeLoader.testJars.DummySimpleClass”)
@dmytromiti在jar中是有效的,并且存在,并且具有该名称的类也不工作,还有其他想法吗?:)jar文件需要在与包层次结构匹配的目录结构中包含已编译的类。在您的图像中,jar中只有源文件。似乎我无法像这样加载Scala类,只能使用您提到的.class,ty