【问题标题】:Loading class through Jars in scala在scala中通过jar加载类
【发布时间】:2019-05-30 15:11:29
【问题描述】:

我正在尝试从目标 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("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)

有什么想法吗?

编辑:添加了jar路径

【问题讨论】:

  • jar 文件需要在与包层次结构匹配的目录结构中包含已编译的类。在您的图像中,jar 中只有源文件。

标签: scala urlclassloader dynamic-class-loaders


【解决方案1】:

根据您的屏幕截图,您的 JAR 文件无效,它包含 .scala 文件。实际的 JAR 文件必须包含 .class 文件。

【讨论】:

  • 看来我不能像这样加载 Scala 类,只适用于你提到的 .class,ty
【解决方案2】:

您还需要提及包名

 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)

【讨论】:

  • @PedroCorreiaLuís 检查路径 ...DummySimpleClass3.jar 是否是有效的 JAR(不确定 Windows 中路径中的空格)。类名应该没有scala:classLoader.loadClass("typeLoader.testJars.DummySimpleClass")
  • @DmytroMitin jar 是有效的并且存在,并且具有该名称的类也不起作用,还有更多想法吗? :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2020-08-23
  • 2012-11-11
  • 2012-09-22
相关资源
最近更新 更多