Правильный способ добавления сторонних зависимостей в развертывание ejb-jar wildfly-swarm

Я пытаюсь создать банку wildfly swarm для развертывания ejb-jar, которая содержит только MDB.

Метод bean-компонента onMessage использует стороннюю библиотеку, которая включена в зависимости проекта.

Сгенерированная банка uber содержит библиотеку, но по какой-то причине я получаю исключение ClassNotFound, когда пытаюсь использовать библиотеку.

Если мы изменим тип упаковки с простого «банка» на «война», все будет работать как положено.

Как правильно добавить стороннюю зависимость к простому развертыванию ejb-jar для wildfly swarm?


person Vittorio Ballestra    schedule 20.02.2018    source источник
comment
Я предполагаю, что было бы возможно создать module.xml для вашей сторонней библиотеки и добавить зависимость модуля в развертывание JAR через jboss-deployment-structure.xml или что-то в этом роде, но почему бы не использовать WAR, который действительно может содержать зависимости в WEB-INF/lib? Разве это не намного проще?   -  person Ladicek    schedule 20.02.2018
comment
Как отметил @Ladicek, JAR не имеют связанных зависимостей. Таким образом, чтобы использовать JAR, вам нужно будет использовать файлы module.xml. В этом случае проще использовать WAR там, где это происходит за вас.   -  person Ken    schedule 20.02.2018
comment
Я просто подумал, что можно создать оптимизированный рой без веб-стека, который в этом случае не используется. Другой вариант — использовать упаковку .ear, но я знаю, что она еще не поддерживается. А пока мы используем упаковку .war, как вы предложили.   -  person Vittorio Ballestra    schedule 21.02.2018
comment
У меня похожая проблема и я не могу с ней справиться. С моей точки зрения, если он переупакован с зависимостями с помощью плагина wildfly-swarm-plugin, он просто должен работать.   -  person mirec    schedule 09.07.2018


Ответы (1)


Я не уверен, что такое "правильное" решение. Мне всегда казалось немного странным, что пакет thorntail (бывший рой диких мух) всегда должен быть WAR и всегда должен включать undertow и/или jaxrs, даже если они не используются.

Как следует из первого комментария выше, в пакет JAR можно включать сторонние зависимости.

В src/main/resources моего проекта maven я добавил подкаталоги modules/com/example/mymodule/main и добавил module.xml в каталог main.

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.example.mymodule">
<resources>
    <artifact name="org.apache.pdfbox:pdfbox:2.0.13" />
</resources>

<dependencies>
    <module name="org.apache.commons.logging"></module>
    <module name="org.apache.commons.io"></module>
    <module name="org.apache.httpcomponents"></module>
</dependencies>
</module>

Приведенный выше xml ссылается на артефакты maven, которые я включил в свой POM. Вы также можете ссылаться на другие модули.

Затем я добавил jboss-deployment-structure.xml к src/main/resources/META-INF

<jboss-deployment-structure>
<deployment>
    <dependencies>
        <module name="com.example.mymodule" />
    </dependencies>
</deployment>
</jboss-deployment-structure>

Любая сторонняя зависимость, которую вы добавляете в свой POM, теперь должна быть добавлена ​​в module.xml. Я знаю, что это немного больно, было бы очень хорошо, если бы плагин maven мог сделать что-то, чтобы автоматизировать это.

person Martin Cassidy    schedule 28.05.2019