mvn jboss:deploy се проваля с NoClassDefFoundError

Когато внедрявам EJB проект в JBoss с помощта на JBoss Maven Plugin, получавам NoClassDefFoundError на конзолата на моя JBoss за клас, който е в една от зависимостите на този EJB проект.

Тази зависимост е декларирана с обхват на компилиране. Има ли друг обхват, който трябва да използвам, така че моите зависимости също да бъдат разгърнати в JBoss? Или как трябва да реша това?

Грешката изглежда така:

DEPLOYMENTS IN ERROR:
  Deployment "vfszip:/Users/hordine/projects/SoftBudget/soft-budget-ejb/target/soft-budget-ejb.jar/" is in error due to the following reason(s): java.lang.NoClassDefFoundError: br/com/pedra/j2eepatterns/facade/IEntityService

person Henrique Ordine    schedule 04.04.2013    source източник
comment
Какъв е вашият ejb пакет? буркан, война или ухо?   -  person Charlee Chitsuk    schedule 05.04.2013
comment
Като буркан. Не искам да се налага да внедрявам зависимостите отделно, като ги копирам в папката lib на сървъра, възможно ли е?   -  person Henrique Ordine    schedule 05.04.2013


Отговори (1)


Разбирам, че сте пакетирали EJB като jar файл. Това означава, че няма предоставена зависимост като самостоятелен буркан.

AFAIU, може да има 3 възможни начина, както следва: -

  1. Пакетирайте ги като ear и поставете тези зависимости вътре в ear/lib. Моля, вижте Maven EAR Plugin за допълнителна информация.

  2. Пакетирайте ги като war и поставете тези зависимости вътре в WEB-INF/lib. Моля, вижте Maven WAR Plugin за допълнителна информация.

  3. Опаковайте ги като jar и поставете тези зависимости вътре в classpath или application server lib. Моля, вижте документа на вашия сървър на приложения.

РЕДАКТИРАНО: Ако използвате JavaEE 6, тогава е възможно да пакетирате EJB като war файл. Урокът за Java EE 6: Пакетиране на корпоративни компоненти в WAR модули ни каза като

Enterprise beans често осигуряват бизнес логиката на уеб приложение. В тези случаи пакетирането на корпоративен bean в рамките на WAR модула на уеб приложението опростява внедряването и организацията на приложението. Корпоративните компоненти могат да бъдат опаковани в WAR модул като файлове с класове на език за програмиране Java или в JAR файл, който е пакетиран в WAR модула.

За да включите enterprise bean файлове с клас в WAR module, файловете с клас трябва да са в директорията WEB-INF/classes.

За да включите JAR file, който съдържа enterprise beans в a WAR module, добавете JAR към директорията WEB-INF/lib на модула WAR.

WAR модулите, които съдържат корпоративни компоненти, не изискват ejb-jar.xml дескриптор за разполагане. Ако приложението използва ejb-jar.xml, то трябва да се намира в директорията WEB-INF на модула WAR.

Надявам се това да помогне.

person Charlee Chitsuk    schedule 05.04.2013
comment
Опаковах ги като буркан, да. Благодаря за опциите, но не искам да го внедрявам в EAR и не мисля, че можете да пакетирате EJB като WAR. (или можете). Искам да ги разположа като Jar. Страхувах се, че ще трябва да разположа зависимостите отделно, да. Гласувах за теб, но да видим дали някой друг има по-добра идея. - person Henrique Ordine; 05.04.2013
comment
Ако използвате JavaEE6, е възможно да пакетирате EJB като war. Моля, вижте моя редактиран за допълнителна информация. - person Charlee Chitsuk; 05.04.2013
comment
Благодаря за цялата информация, хубаво е да знам всичко това, но използвам JBoss 5 и JavaEE 5. - person Henrique Ordine; 05.04.2013