Мне удалось встроить стандартную Groovy-консоль в Felix и выставить ряд переменных (например, BundleContext и т. Д.).
Однако при «первом» запуске моего комплекта чертежей я получил эту ошибку:
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_24]
... ... ...
at groovy.util.FactoryBuilderSupport.callAutoRegisterMethods(FactoryBuilderSupport.java:202)[groovy-all-1.7.8.jar:1.7.8]
... 42 more
Caused by: java.lang.NoClassDefFoundError: sun/reflect/ConstructorAccessorImpl
at sun.misc.Unsafe.defineClass(Native Method)[:1.6.0_24]
... ... ...
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)[:1.6.0_24]
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)[:1.6.0_24]
... ... ...
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153)[groovy-all-1.7.8.jar:1.7.8]
at groovy.swing.SwingBuilder.registerActionButtonWidgets(SwingBuilder.groovy:94)[groovy-all-1.7.8.jar:1.7.8]
... 47 more
Caused by: java.lang.ClassNotFoundException: *** Package 'sun.reflect' is not imported by bundle groovy-all [18], nor is there any bundle that exports package 'sun.reflect'. However, the class 'sun.reflect.ConstructorAccessorImpl' is available from the system class loader. There are two fixes: 1) Add package 'sun.reflect' to the 'org.osgi.framework.system.packages.extra' property and modify bundle groovy-all [18] to import this package; this causes the system bundle to export class path packages. 2) Add package 'sun.reflect' to the 'org.osgi.framework.bootdelegation' property; a library or VM bug can cause classes to be loaded by the wrong class loader. The first approach is preferable for preserving modularity. ***
at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1782)[org.apache.felix.framework-3.0.9.jar:]
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)[:1.6.0_24]
at org.codehaus.groovy.runtime.callsite.CallSiteClassLoader.loadClass(CallSiteClassLoader.java:51)[groovy-all-1.7.8.jar:1.7.8]
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)[:1.6.0_24]
at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.loadClass(ClassLoaderForClassArtifacts.java:58)[groovy-all-1.7.8.jar:1.7.8]
... 65 more
Caused by: java.lang.ClassNotFoundException: sun.reflect.ConstructorAccessorImpl not found by groovy-all [18]
at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787)[org.apache.felix.framework-3.0.9.jar:]
at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)[org.apache.felix.framework-3.0.9.jar:]
at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768)[org.apache.felix.framework-3.0.9.jar:]
... 69 more
За исключением того, что мой пакет теперь активен.Однако консоли не показывают.Если я остановлюсь и снова начну сборку, ошибка больше не будет отображаться, и я смогу увидеть и использовать мою качающуюся консоль Groovy.
Трассировка стека указывает следующие варианты решения этой проблемы:
Добавить пакет 'sun.reflect' в свойство 'org.osgi.framework.system.packages.extra' и изменить пакет groovy-all [18] для импорта этого пакета;это заставляет системный пакет экспортировать пакеты путей к классам.
Добавить пакет 'sun.reflect' в свойство 'org.osgi.framework.bootdelegation';ошибка библиотеки или виртуальной машины может привести к загрузке классов неправильным загрузчиком классов.Первый подход предпочтителен для сохранения модульности.*
Я совершенно уверен, что с вариантом 2 ошибка исчезнет.
Однако мой вопрос ... если sun.reflect
не импортируется, почему Groovy консоль отображается после перезапуска пакета?Цените совет от любого с таким опытом.