Я работаю над проектом Maven Java EE, который существует уже довольно давно (10 лет и более) и в настоящее время включен в Java 7 - он работает на Glassfish 3.1.2 в настоящее время, и я работаю черезIntelliJ через EAR-файл, содержащий несколько jar-файлов, включая jar-файл EJB.
Я пробовал несколько путей миграции, которые, можно надеяться, приведут проект в поддерживаемую версию Java (в 8, но, надеюсь, и далее, черезнесколько детских шагов).До сих пор я пробовал и Glassfish, и Payara 4.1.
Проект успешно скомпилируется в Java 8 (JDK1.8.0_181
), но при попытке развертывания на работающем сервере я получаю несколькоошибки разбивки - все они относятся к классам EJB по одному и тому же шаблону:
Error in annotation processing: {0}.
java.lang.NoClassDefFoundError: my/module/class/ejb/path/SomeClass
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at com.sun.enterprise.loader.ASURLClassLoader.findClass(ASURLClassLoader.java:807)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at com.sun.enterprise.loader.CurrentBeforeParentClassLoader.loadClass(CurrentBeforeParentClassLoader.java:83)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at com.sun.enterprise.loader.ASURLClassLoader.findClass(ASURLClassLoader.java:807)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at com.sun.enterprise.loader.CurrentBeforeParentClassLoader.loadClass(CurrentBeforeParentClassLoader.java:83)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.sun.enterprise.deployment.annotation.impl.ModuleScanner.getElements(ModuleScanner.java:295)
at com.sun.enterprise.deployment.archivist.Archivist.processAnnotations(Archivist.java:592)
at com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:461)
at com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:445)
at com.sun.enterprise.deployment.archivist.Archivist.readRestDeploymentDescriptors(Archivist.java:417)
at com.sun.enterprise.deployment.archivist.Archivist.openWith(Archivist.java:290)
at com.sun.enterprise.deployment.archivist.ApplicationFactory.openWith(ApplicationFactory.java:232)
at org.glassfish.javaee.core.deployment.DolProvider.processDOL(DolProvider.java:189)
at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:223)
at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:91)
at com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:882)
Я пробовал несколько разных вещей, суммируемых как:
Все отлично работает на Glassfish 3.1.2 с JDK 1.7_080
, но есть некоторые «предупреждения», подобные приведенным выше, но они не влияют на развертывание
Ни то, ни другоеPayara 4.1.2 или Glassfish 4.1.1 будут загружаться при использовании JDK 1.7_080
Я пытался скомпилировать с maven-ejb-plugin 3.1
и без него, используя addClassPath
, вручную проверяя EJBmanifest.mf на наличие пути к классам (с и без).
Я проверил содержимое развертывания приложения домена на наличие перечисленных классов - они существуют, находятся в JAR-файлахв EAR (взорвался и в противном случае) и находятся в правильном направлениикатион.
- Я пытался быть более явным в зависимостях для модуля EJB, устанавливая версии, на всякий случай.
У меня почти закончились идеис этим.
Я признаю, что EJB и Maven - не мой предмет специалиста, но каждый ресурс до сих пор приводил меня к решениям, которые не являются причиной - есть ли что-то еще, что я должен попробовать?
Редактировать / обновить
Некоторые дополнительные отладки в ClassLoader позволяют предположить, что пути к классам разрешаются, например, glassfish/domains/mydomain/applications/lib/commons-net.jar
.
Нет *Каталог 1048 * в приложениях, только мой каталог My-Application-1.0-SNAPSHOT
, содержащий META-INF
и каталог базового пакета (uk
).Однако каталог lib
присутствует в каталоге target
моего проекта (вместе с файлами META-INF
и файлами war
/ jar
).