我使用自定义类加载器将 ASM 与 java 一起使用,但在 scala 中做同样的事情时遇到了麻烦。首选方法是什么?
AHelloScala.scala
编译成两个类(HelloScala.class
和 HelloScala$.class
)。我需要欺骗两者的字节码吗?
我的代码似乎只填充了一个 , HelloScala$.class
,但没有公共构造函数或方法。我可以使用 Reflection API 并使用 Constructor 来获取访问权限,但有两个问题:
- 通过忽略
HelloScala.class
,我是否错过了任何有价值的东西? - 这是危险的还是臭的?
“正确”的方法可能是调用 public, static main
in HelloScala
,但我得到这个错误:
[Loaded HelloScala from __JVM_DefineClass__]
[Loaded scala.ScalaObject from file:/home/julianpeeters/asm-scala-example/lib/scala-library-2.9.1.jar]
[Loaded HelloScala$ from __JVM_DefineClass__]
[Loaded sun.reflect.NativeMethodAccessorImpl from /usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar]
[Loaded sun.reflect.DelegatingMethodAccessorImpl from /usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar]
[Loaded java.lang.reflect.InvocationTargetException from /usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar]
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at HelloScalaDump.main(HelloScalaDump.java:41)
Caused by: java.lang.NoClassDefFoundError: HelloScala$
at HelloScala.main(Unknown Source)
... 5 more
Caused by: java.lang.ClassNotFoundException: HelloScala$
at java.lang.ClassLoader.findClass(ClassLoader.java:373)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 6 more
似乎HelloScala$
正在加载,为什么找不到呢?
谢谢!