2016-06-20 2 views
1

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

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

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

Глядя далее, я узнал, что в MANAPEST.MF есть разница в разделе classpath. Maven проект поставил там экземпляры с Lib/префиксом и М2Э/РАУ без, как это:

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

в чистом мавена и:

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

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

Моя текущая конфигурация 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 

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

Update: пытался добавить явить раздел:

<classpathPrefix>lib/</classpathPrefix> 

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

+0

Если вы создаете поддержку файлов EAR для тощих войн, те файлы, которые были извлечены, должны быть расположены где-то, что означает, что в случае EAR в папку lib на уровне EAR. Я не знаю, что делает RAD здесь ... – khmarbaise

+0

Да, они есть. Просто не упоминается ниоткуда. Также см. Обновление для вопроса. – Anton

+0

Исключения испускаются сервером приложений Websphere, если вы развернули файл EAR? – khmarbaise

ответ

0

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

0

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

here и here.

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

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

+0

Это уже сделано, проект начался как проект RAD (который скрывает муравей под его кожей) и должен был быть преобразован в maven, потому что CI и ant не хорошо работал. После конвертации я заметил, что RAD ведет себя иначе, чем собственный maven. – Anton