2015-07-30 2 views
2

Развертывание EJB Jar в WildFly 8.2.0 с включенным CDI (т. Е. С минимальным файлом beans.xml) приводит к выходу исключений «Enclosing method not found». В журналах нет ничего особенно полезного для идентификации источника ошибки. Как это исправить?Исключение исключение «Закрытие метода не найдено» в EJB JAR

ответ

1

Это потому, что мой EJB Jar создавалась путем Gradle как «Fat» банку, т.е.

task fatJar(type: Jar) { 
    baseName = project.name + '-all' 
    from { 
     configurations.compile 
      .collect { 
       println it 
       it.isDirectory() ? it : zipTree(it) 
      } 
    } 
    with jar 
} 

Я также имел эти артефакты упоминаться для того, чтобы получить доступ к библиотекам Java EE мне нужно:

compile 'javax:javaee-api:7.0' 
compile 'javax:javaee-web-api:7.0' 
compile 'javax.jms:jms:1.1' 

Проблема заключалась в том, что эти библиотеки Javax были втянуты в JAR, что было ненужным, поскольку Wildfly уже предоставляет их. Дублирование вызывало исключение Weld.

Решение было исключить эти библиотеки Javax из JAR жира:

task fatJar(type: Jar) { 
    baseName = project.name + '-all' 
    from { 
     configurations.compile 
      /* 
       Effectively the javax libraries are provided in scope, 
       so don't add them to the jar. Failing to exclude these 
       leads to Weld CDI exceptions like 
      */ 
      .findAll { 
       it.toString().indexOf('javax') == -1 
      } 
      .collect { 
       println it 
       it.isDirectory() ? it : zipTree(it) 
      } 
    } 
    with jar 
} 

С этим изменением, исключения ушли.

Смежные вопросы