2013-12-05 3 views
1

на этот раз я против игры JBoss 7.1. Мой простое приложение, something.jar, имеет этот JBoss-развертывания-structure.xml:Загрузочные модули в JBoss 7.x

<jboss-deployment-structure> 
    <deployment> 
     <dependencies> 
      <module name="deployment.EarApp.ear.Stuff1-1.0.jar" /> 
      <module name="deployment.EarApp.ear.Stuff2-1.0.jar" /> 
      <module name="deployment.EarApp.ear.Somelib-1.0.jar" /> 
      <module name="org.apache.commons.io"/> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

Compile, строить и depoly идет отлично. Но когда JBoss выполнить эту строку

BodyPart bodypart = new MimeBodyPart(); 
bodypart.setDataHandler(new DataHandler(new FileDataSource(new File(attachment)))); 
bodypart.setFileName(FilenameUtils.getName(attachment)); //this one!! 
m.addBodyPart(bodypart); 

Я получил эту ошибку

...(more) 
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/io/FilenameUtils from [Module "deployment.EarApp.ear.Stuff2-1.0.jar:main" from Service Module Loader] 
...(more) 

Что случилось с ним? Почему мое приложение не может видеть apache commons io?

+0

Я не знаю, если это будет работать или нет, но вы пробовали положить 'экспорт =«истинный»' 'после того, как имя =«org.apache.commons.io»'? – disrvptor

+0

Где находится код, который вы пытаетесь выполнить? В одной из ваших зависимостей или развертывании, содержащем 'jboss-deployment-structure.xml' –

+0

@disrvptor Да, я попытался и развернуло сбой. Удалите export = "true", и развертывание будет прекрасным. – Francesco

ответ

1

Ну

Stuff2, кажется, баночка в развертывании автономного EARApp - таким образом Stuff2 (или EARApp) должен обрабатывать свои собственные Deps, вы не можете сделать это право от структуры развертывания «Некоторые приложения». В наши дни все изолировано.

. Простейшим решением в вашем случае может быть добавление аналогичного jboss-deployment-structure.xml в папку META-INF в банке Stuff2 (или EARApp, если также Stuff1 нуждается в файлах IO), и убедитесь, что он имеет ссылка на <module name="org.apache.commons.io"/>. Или, как я бы предпочел, вместо этого убедитесь, что ваш инструмент сборки (Maven?) Добавляет атрибут dependencies для MANIFEST.MF или Stuff2.jar (или EARApp) в org.apache.io, и вам не понадобится jboss -deployment-structure.xml-файл.

Это, как говорится, не очень соответствует JEE - вы из «Некоторых приложений» (война, ухо?), Ссылаясь на банки внутри других устьев? Это звучит как неприятность для меня! У вас, вероятно, есть веская причина, по которой вы пошли в этом направлении, но вы, конечно, можете подумать о переупаковке «Некоторое приложение» стандартным способом JEE. Если вы поместили бы как банку Stuff2, так и Commons IO в папку lib «Некоторое приложение», вам не нужно было бы думать о JBoss-модулях, файлах JBoss-дескриптора или даже стандартных файлах дескриптора.

уш, Jens

+0

Правда. Проблема заключалась в том, что я добавил зависимость модуля org.apache.commons.io к неправильному модулю. Это был Stuff2-1.0.jar это использование commons.io. Ваш аргумент также верен мне, поэтому я считаю это правильным ответом. – Francesco

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