Я занимаюсь разработкой приложения, которое использует Geotools, которое, в свою очередь, использует API расширенной визуализации Java (JAI) для работы под Glassfish. Когда я запускаю свое приложение из Netbeans как файл JAR EJB, оно не может быть развернуто из-за исключения ClassNotFoundException во время сканирования CDI:
com.google.common.collect.ComputationException: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.autogena.skyserver.data.filetypes.SwathFile
at com.google.common.collect.ComputingConcurrentHashMap.compute(ComputingConcurrentHashMap.java:218)
....
Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.autogena.skyserver.data.filetypes.SwathFile
at org.jboss.weld.resources.ClassTransformer.loadClass(ClassTransformer.java:189)
.....
Caused by: java.lang.NoClassDefFoundError: javax/media/jai/PropertySource
at java.lang.ClassLoader.defineClass1(Native Method)
....
Caused by: java.lang.ClassNotFoundException: javax.media.jai.PropertySource
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
Однако, если я упакую модуль EJB в файл EAR, я не получу исключение, описанное выше, и, похоже, он загрузится нормально.
Поскольку на Mac базовые классы JAI находятся в библиотеке расширений системы, я озадачен тем, как они не отображаются на пути к классам.
Есть ли разница между файлом JAR EJB и файлом EAR, когда дело доходит до загрузки класса, или это большая проблема в Glassfish / Weld?
Если подумать - как стеклянная рыбка в любом случае находит библиотеки, которые использует мой prject - они, похоже, не упакованы в файл ejb jar - netbeans делает что-то умное под капотом, что как-то искажается?
спасибо,
Джош