Создайте XML-файл со всеми зависимостями с помощью Maven - PullRequest
9 голосов
/ 13 октября 2011

Мне нужно сгенерировать файл module.xml для JBoss7 для проекта maven, который имеет много jar-зависимостей.Какой самый простой способ сделать это?Файл выглядит следующим образом:

<module xmlns="urn:jboss:module:1.0" name="ats.platform">
  <resources>
    <resource-root path="dom4j-1.6.1.jar"/>
    <resource-root path="jdom-1.0.jar"/>
...
  </resources>
</module>

, поэтому для каждой jar-зависимости проекта необходимо создать элемент <resource-root>.

Или, возможно, я что-то не так делаю?Как правильно создать модуль JBoss7 из проекта maven?

Ответы [ 4 ]

4 голосов
/ 01 апреля 2015

Вы можете попробовать smartics-jboss-modules-maven-plugin

Обеспечивает довольно мощный контроль зависимостей:

  • исключений и включений (также с подстановочными знаками) для проекта deps,
  • определение deps для других модулей JBoss,
  • обработка транзитивных зависимостей
  • и многое другое

При правильном дескрипторе сгенерированный модуль готов к копированию «как есть» в JBoss 7.

Пример jboss-modules / foo.bar.foo-module.xml:

<modules xmlns="http://smartics.de/ns/jboss-modules-descriptor/1">
<module name="foo.bar.foo-module">
    <match>
        <includes>
            <include>
                <groupId>foo.*</groupId>
            </include>
            <include>
                <groupId>org.*</groupId>
            </include>
        </includes>
        <excludes>
            <exclude>org.slf4j.slf4j-api</exclude>
        </excludes>
    </match>

    <apply-to-module>
        <dependencies>
            <module name="org.slf4j" />
        </dependencies>
    </apply-to-module>
</module>

Также установите для excludeDependencyManagementDependenciesInPomProject значение true в умной конфигурации плагина, чтобы избежать включения 50 МБ deps:)

4 голосов
/ 16 октября 2011

Я действительно не знаю о JBoss и есть ли другой способ сделать это, но вы можете сделать это довольно просто с GMaven:

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.3</version>
    <configuration>
        <source>
            def sw = new StringWriter()
            def xml = new groovy.xml.MarkupBuilder(sw)
            xml.module(xmlns:'urn:jboss:module:1.0', name:'ats.platform') {
              resources {
                project.runtimeClasspathElements.each {
                  def path = it.find(".*?([\\w\\.-]*\\.jar)") { it[1] }
                  !path?:'resource-root'(path:path)
                }
              }
            }
            println sw
        </source>
    </configuration>
</plugin>

Несколько замечаний:

  1. Этот скрипт выкладывает XML в stdout, но вы можете легко записать его в файл или что-то еще.
  2. runtimeClasspathElements содержит абсолютные пути к банке, поэтому я анализирую его с помощью регулярного выражения. Вы можете настроить регулярное выражение для добавления большего количества пути или просто добавить строку, если вам нужно больше, чем просто имя файла jar.

Я разместил рабочий пример на github (это просто POM), где я связал вышеуказанную конфигурацию плагина с фазой инициализации сборки. Если у вас есть git, вы можете клонировать и запустить его самостоятельно:

git clone git://github.com/zzantozz/testbed tmp
cd tmp
mvn -q initialize -pl stackoverflow/7755255-gmaven-to-build-xml-from-classpath

В примере проекта я добавил jdom 1.0 и dom4j 1.6.1 в качестве зависимостей, и вот вывод, который он создал:

<module xmlns='urn:jboss:module:1.0' name='ats.platform'>
  <resources>
    <resource-root path='jdom-1.0.jar' />
    <resource-root path='dom4j-1.6.1.jar' />
    <resource-root path='xml-apis-1.0.b2.jar' />
    <resource-root path='aspectjrt-1.6.11.jar' />
  </resources>
</module>

Примечание: я не специалист по классным играм, так что может быть отличный способ сделать это, но вы можете видеть, насколько это легко.

2 голосов
/ 16 октября 2011

Это можно легко решить за несколько шагов.

  1. запустить mvn dependency:list -DoutputFile=dep.list -DoutputAbsoluteArtifactFilename=true в вашей оболочке

    вы получите файл, подобный этому: The following files have been resolved: ch.qos.logback:logback-classic:jar:0.9.30:test:C:\Dokumente und Einstellungen\michael-o.m2\repository\ch\qos\logback\logback-classic\0.9.30\logback-classic-0.9.30.jar ch.qos.logback:logback-core:jar:0.9.30:test:C:\Dokumente und Einstellungen\michael-o.m2\repository\ch\qos\logback\logback-core\0.9.30\logback-core-0.9.30.jar classworlds:classworlds:jar:1.1-alpha-2:compile:C:\Dokumente und Einstellungen\michael-o.m2\repository\classworlds\classworlds\1.1-alpha-2\classworlds-1.1-alpha-2.jar

    Важная информация имеет отступ в 4 пробела в файле.

  2. Теперь извлеките важную информацию и не забудьте ограничить ее компиляцией и областью выполнения.

  3. разделить столбцы с помощью cut -d ':' -f <colNum> и получить последний столбец.
  4. Получить имя файла после последней (обратной) косой черты.
  5. Теперь создайте файл XML с информацией.

Каждый может быть упакован в красивый скрипт оболочки.

См. maven-dependency-plugin для справки.

Быстрая команда выглядит такthis: cat dep.list | grep -E ':(compile|runtime):' | cut -d ':' -f 7 | sed -e 's/\///g' | xargs -I {} basename '{}' | xargs -I {} echo "<resource-root path=\"{}\" />"

Вывод содержит имена файлов jar:

<resource-root path="classworlds-1.1-alpha-2.jar" />
<resource-root path="jsr305-1.3.9.jar" />
<resource-root path="guava-10.0.1.jar" />
<resource-root path="commons-codec-1.3.jar" />
<resource-root path="commons-io-2.0.1.jar" />
<resource-root path="commons-lang-2.6.jar" />
<resource-root path="junit-4.9.jar" />

Теперь добавьте заголовок и нижний колонтитул XML, и все готово!

1 голос
/ 09 ноября 2013

Хотя этот вопрос довольно старый и уже имеет правильный ответ, я бы хотел упомянуть другую альтернативу.

Поскольку мы начали с модулей JBoss, мы написали небольшой плагин для Maven, который генерирует папки модулей с модулем.xmls на основе XML-дескрипторов.Плагин называется smartics-jboss-modules-maven-plugin , дополнительную информацию о нем вы найдете в блоге проекта .

Мы только начали работатьс ним, но это уже делает процесс синхронизации между POM и module.xml (плюс структура каталогов) для наших проектов очень простым.

Недостатком этого подхода является то, что вам нужно изучить дополнительный XML-дескриптор и настроить дополнительный плагин Maven.Так что для небольших проектов вам лучше следовать решениям из приведенных выше ответов.

Если вы хотите попробовать его, плагин лицензируется под лицензией Apache License 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...