我尝试运行一个显然使用sun.reflect包的包。
首先是一些背景信息:我在 Android 上使用 Apache Felix 。 我还添加了sun.reflect作为系统额外包。
String extrapackets = "sun.reflect; version=\"1.0.0\"";
config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, extrapackets);
config.put("felix.bootdelegation.implicit", "false");
“sun.reflect”也显示在系统包的导出列表中(使用标题cmd)。 它是由我的捆绑导入的。它在导出和导入内容时也得到了正确的版本号。
ERRORMSG:
java.lang.NoClassDefFoundError: sun/reflect/ConstructorAccessorImpl
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
at sun.reflect.MethodAccessorGenerator.generateConstructor(MethodAccessorGenerator.java:76)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:30)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
...
答案 0 :(得分:1)
如果其他人遇到此问题,可能会有更快的解决方法。
我在Sun / Oracle JVM上运行的OSGi中使用反射时遇到了这个错误。结果是this is a known issue。在JVM级别设置-Dsun.reflect.noInflation=true
的建议修复将导致不引用该类,代价是忽略优化。
我尝试了修复,它对我有用。
答案 1 :(得分:0)
据我所知,sun。*包是您在计算机上安装的Oracle JVM中使用的内部包。另一方面,Android不使用Sun的(现在的Oracle)JVM实现。 Android提供类似于Java SE的API,但它有自己的VM实现(称为Dalvik VM)。
所以,你不会在Android上找到sun。*包。您需要获取所使用的包的源代码,并针对Android库(使用eclipse中的Android项目或使用Ant)进行编译。然后,将它重新打包到一个jar中,然后你就可以在不引用sun。* packages的情况下进行部署。
卡尔蒂克
答案 2 :(得分:0)
您是否还导入捆绑包?只是将它添加到您的systembundles.extra是不够的。