Wildfly - Модули - Как правильно определить пакет и информацию о зависимостях?

Я нахожусь в процессе развертывания некоторых старых веб-приложений в Wildfly 10 и понял, что есть аспект настройки серверов приложений, с которым я только когда-либо сталкивался. Я подумал, что пора попробовать и действительно понять, что я делаю.

В частности, мне неясны следующие два вопроса, касающиеся настройки модулей для самого сервера приложений:

  • Модули настроены таким образом, что в каталоге modules/ есть подкаталоги внутри, которые соответствуют имени пакета класса в JAR. Я всегда открывал JAR в такой программе, как 7zip, чтобы изучить структуру, а затем воспроизвести ее.

Есть ли «правильный» способ угадать эту информацию? Предполагается ли, что создатель JAR предоставил бы его?

  • Когда вы создаете файл module.xml, вас просят указать зависимости JAR, на которые ссылаются. Например, драйверы JDBC часто зависят от таких вещей, как классы сохраняемости Java.

Как и выше, может ли JAR определить эту информацию? Я знаю, что в некоторых случаях будет файл МАНИФЕСТА, который, кажется, предоставляет что-то подобное, но всегда это не так. Есть ли способ использовать информацию в манифесте (при условии, что она присутствует) для создания соответствующей информации о модуле?


person benjamin    schedule 18.06.2016    source источник


Ответы (1)


Нет жесткого правила, согласно которому имена модулей должны совпадать с именем пакета. Модули обычно просто используют имя пакета, так как это, вероятно, уникальное пространство имен. Например, вы можете создать модуль с именем example с пакетом com.example. module.xml просто нужно в $JBOSS_HOME/modules/example/main. Обратите внимание, что main — это слот по умолчанию для модулей.

В module.xml вам просто нужно сослаться на ваш файл jar и любые необходимые зависимости. Если вы хотите, чтобы зависимости были модулями сами по себе, вам нужно явно объявить их в файле module.xml. Если вас не волнует, что у каждой зависимости есть собственный модуль, вы можете просто включить их все как ресурсы в файл module.xml.

Пример модуля, использующего зависимости ресурсов:

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="example">
    <resources>
        <resource-root path="example.jar"/>
        <resource-root path="guava-19.jar"/>
    </resources>
</module>

В приведенном выше случае библиотеки example.jar и guava-19.jar должны находиться в каталоге $JBOSS_HOME/modules/example/main.

Пример использования зависимостей модуля:

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="example">
    <resources>
        <resource-root path="example.jar"/>
    </resources>

    <dependencies>
        <module name="com.google.guava"/>
    </dependencies>
</module>

В приведенном выше случае только example.jar должен находиться в каталоге $JBOSS_HOME/modules/example/main.

Вы также можете использовать команду module add CLI для добавления модулей в WildFly. Опять же, имя модуля не имеет значения, если оно уникально. Например, вот как добавить модуль PostgreSQL с CLI.

module add --name=org.postgresql --resources=~/Downloads/postgresql-9.4-1203.jdbc42.jar --dependencies=javax.api,javax.transaction.api

Использование CLI для добавления модулей позволяет избежать необходимости создавать структуру модуля и файл module.xml вручную. Единственная загвоздка в том, что CLI и WildFly должны находиться в одной и той же файловой системе, а пользователь, запускающий CLI, должен иметь права на запись в $JBOSS_HOME/modules. Команда автоматически создаст структуру каталогов, скопирует ресурсы и сгенерирует файл module.xml.

Что касается MANIFEST.MF записей. В модулях JBoss есть ключ входа, используемый для определения зависимостей модуля с именем Dependencies:. Однако я считаю, что использование module.xml немного удобнее, поэтому вам не нужно пересобирать или изменять двоичные файлы, если вам нужно добавить зависимость от модуля или удалить зависимость от модуля. Однако для развертываний может иметь смысл использовать запись MANIFEST.MF.

Если вы еще не видели его, взгляните на загрузку класса. в документации WildFly. Это в основном объясняет, как работает загрузка классов для развертываний.

person James R. Perkins    schedule 18.06.2016
comment
Также для перечисления зависимостей самого модуля вы также можете использовать сами jboss-modules, чтобы помочь вам в этом. что-то вроде java -jar jboss-modules -mp ‹path-to-modules-dir› -deptree ‹name-of-module› даст вам полное дерево зависимостей для переданного модуля. - person Tomaz Cerar; 28.06.2016