Maven и RAD производят разные EAR

Мне нужно построить проект (родительский и EAR, который содержит jar, ejb и 2 военных модуля) из RAD 9.5 и с maven.

Когда я создаю проект из командной строки maven, все работает нормально. Он создает архив тощих войн, который работает на WebSphere 8.5.5.

При попытке обновить проект из RAD или экспортировать EAR я получаю файл, который отличается и не будет работать, с ClassNotFoundException для одной из зависимостей EJB.

Глядя дальше, я обнаружил, что есть разница в MANIFEST.MF в разделе пути к классам. Проект Maven поместил туда экземпляры с префиксом lib/ и m2e/RAD без префикса, например:

Class-Path: lib/log4j-api-2.6.jar lib/log4j-core-2.6.jar lib/junit-4.12.jar lib/hamcrest-core-1.3.

в чистом maven и:

Class-Path: log4j-api-2.6.jar log4j-core-2.6.jar junit-4.12.jar hamcrest-core-1.3.

Я пытался обновить проект, играл с настройками в pom. Это самое близкое к рабочему приложению.

Моя текущая конфигурация плагина ejb:

        <plugin>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
                <ejbVersion>3.1</ejbVersion>
            </configuration>
        </plugin>

И исключение (самый низкий уровень):

Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.net.URLClassLoader.findClass(URLClassLoader.java:600)
at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:243)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:786)
at java.lang.ClassLoader.loadClass(ClassLoader.java:764)
at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:741)
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585)
at java.lang.ClassLoader.loadClass(ClassLoader.java:741)
... 75 more

Я предполагаю, что это проблема, но я не знаю, как это исправить.

Обновление: попытался добавить в раздел манифеста:

<classpathPrefix>lib/</classpathPrefix>

такой же результат.


person Anton    schedule 20.06.2016    source источник
comment
Если вы создаете EAR-файл с поддержкой тощих войн, те файлы, которые были извлечены, должны быть где-то расположены, что в случае EAR означает в папку lib уровня EAR. Я не знаю, что РАД здесь делает...   -  person khmarbaise    schedule 20.06.2016
comment
Да, они есть. Просто ниоткуда не упоминается. Также см. обновление для вопроса.   -  person Anton    schedule 20.06.2016
comment
Исключения создаются сервером приложений Websphere, если вы развернули файл EAR?   -  person khmarbaise    schedule 20.06.2016
comment
да. Я могу опубликовать полное исключение, но я уверен, что основное исключение - это то, что я задал в вопросе.   -  person Anton    schedule 20.06.2016
comment
Развернутый файл EAR был создан с помощью Maven или RAD?   -  person khmarbaise    schedule 20.06.2016
comment
Я построил и развернул оба. Один из чистых maven стартовал.   -  person Anton    schedule 20.06.2016
comment
Другими словами, проблема заключается в RAD или использовании RAD?   -  person khmarbaise    schedule 20.06.2016
comment
да. Я считаю, что в плагине m2e есть некоторая неправильная конфигурация или ошибка.   -  person Anton    schedule 20.06.2016
comment
Какую версию m2e вы используете?   -  person khmarbaise    schedule 20.06.2016
comment
Извините за задержку, был вдали от компьютера - 1.6.2.20150902-0002   -  person Anton    schedule 20.06.2016


Ответы (2)


Это окольный ответ, но вы можете добиться большего успеха, начиная с проектов EE: WAR, EAR и т. д., а затем используя параметр «Преобразовать в проекты Maven».

Вы можете найти информацию здесь и здесь.

Как только вы узнаете структуру Maven, которая будет отображаться на структуру проекта EE в RAD, вы также сможете работать в другом направлении. Не знаю, сколько работы вам останется, если вас устраивает существующий формат проекта.

Не уверен, что ответил на ваш вопрос, но это было слишком долго для комментария, так что вот оно...

person Scott Kurz    schedule 21.06.2016
comment
Это уже сделано, проект начинался как проект RAD (который скрывает муравья под своей кожей) и должен был быть преобразован в maven, потому что CI и муравей не работали должным образом. После преобразования я заметил, что RAD ведет себя не так, как родной maven. - person Anton; 21.06.2016

Я заметил, что если я скопирую файл manifest.mf, сгенерированный maven, в проект, а затем соберу проект с помощью RAD, он перенесет нужный файл в окончательный EAR. Это обходной путь. Кроме того, в соответствии с этим: m2e-wtp будет генерировать манифест только в том случае, если он не существует.

person Anton    schedule 30.06.2016