Создание произвольных распределений из проекта Maven, содержащего несколько дополнительных модулей - PullRequest
2 голосов
/ 05 января 2010

Прежде всего: мои знания Maven ограничены, поэтому, пожалуйста, потерпите меня. ;-) У меня есть простой проект Maven, в настоящее время состоящий из трех модулей. Модуль, содержащий ядро ​​приложения, называется core (Creative name, huh? :-)), а остальные модули в основном являются плагинами для этого основного модуля. Есть одно ограничение: только один плагин может быть добавлен в основной модуль.

Базовый модуль имеет собственную конфигурацию Spring IoC за вычетом конфигурации плагина. Это довольно просто: код ядра будет читать бин с именем «плагин», который не определен в конфигурации ядра. Модули плагинов будут поставлять свои собственные файлы конфигурации, которые будут содержать компонент с именем «плагин», который затем используется основным кодом. Это идеально вписывается в мой случай использования.

Я хочу предоставить администратору, который развернет систему, простой способ создать дистрибутив, содержащий ядро, выбранный плагин и разумную конфигурацию по умолчанию. Может быть tar.gz или что-то в этом роде. Я не хочу, чтобы он копал мои файлы Spring IoC, копировал их вместе и т. Д. И т. Д. Фактическая конфигурация, такая как порты TCP / IP, выполняется в файлах свойств.

Чтобы уточнить, что я имею в виду, я построил пример структуры. Обратите внимание, что имена файлов приведены только для пояснения.

/bin/core.jar [Build from core module]  
/bin/plugin.jar [Build from a plugin module]

/lib-bin/library-required-by-plugin.jar [Dependency resolved by maven + copy]
/lib-bin/library-required-by-core.jar [Dependency resolved by maven + copy]
/lib-bin/another-library-required-by-core.jar [Dependency resolved by maven + copy]

/etc/spring/core-beans.xml [Copied from core module /etc/]
/etc/spring/plugin.xml [Copied from plugin module /etc/]
/etc/default-core-config.properties [Copied from core module /etc/]
/etc/default-plugin-config.properties [Copied from plugin module /etc/]

В настоящее время я возлюсь с плагином сборки, но, кажется, я обхожу круги и ничего не работает. Довольно расстраивает. Если вам нужна дополнительная информация или вы не поняли мою точку зрения, не стесняйтесь спрашивать. : -)

Дополнение, чтобы уточнить мой вопрос: как это сделать? (Ну, это так просто :-)) Как я уже говорил ранее, мои знания о Maven ограничены, и в настоящее время я никуда не денусь, даже если я знаю, что плагин сборки может быть подходящим вариантом. Особенно, как получить зависимости от каждого модуля, где настроить плагин (в родительском проекте?) И даже немного дескриптора сборки, очень поможет.

Спасибо за ваш вклад!

Ответы [ 2 ]

1 голос
/ 06 января 2010

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

  • Определить сборочный плагин в pom,
    это включает в себя привязку плагина к фазе пакета жизненного цикла сборки
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-3</version>
    <configuration>
        <descriptors>
            <descriptor>src/main/assembly/bin.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>assembly</id>
            <phase>package</phase>
            <goals>
                <goal>assembly</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  • Определите дескриптор сборки, то есть укажите содержимое и структуру вашего распространяемого архива, вот мой ниже:
<assembly>
  <id>bin</id>
  <includeBaseDirectory>false</includeBaseDirectory>
  <formats>
      <format>zip</format>
  </formats>
  <fileSets>
      <fileSet>
          <directory>target</directory>
          <includes>
              <include>ctmemapi.properties</include>
              <include>ctmxml/*</include>
              <include>scampa</include>
              <include>*.bat</include>
              <include>*.sh</include>
          </includes>
          <outputDirectory>${project.artifactId}-${project.version}</outputDirectory>
          <fileMode>755</fileMode>
      </fileSet>
      <fileSet>
          <directory>target</directory>
          <includes>
              <include>scampa*.jar</include>
          </includes>
          <outputDirectory>${project.artifactId}-${project.version}/lib</outputDirectory>
          <fileMode>644</fileMode>
      </fileSet>
      <fileSet>
          <directory>src/test/data</directory>
          <outputDirectory>${project.artifactId}-${project.version}/test-data</outputDirectory>
          <fileMode>644</fileMode>
      </fileSet>
  </fileSets>
  <dependencySets>
      <dependencySet>
          <outputDirectory>${project.artifactId}-${project.version}/lib</outputDirectory>
          <fileMode>644</fileMode>
      </dependencySet>
  </dependencySets>
</assembly>
  • Создайте сборку с помощью одной из следующих команд

    мвн сборка: сборка
    пакет мвн
    mvn install
    mvn deploy

0 голосов
/ 05 января 2010

Если вы просто ожидаете подтверждения, то я подтверждаю, что описанная вами ситуация является идеальным вариантом использования для плагина Maven Assembly . Я бы просто использовал отдельные профили, чтобы справиться с ограничением (« Только один плагин может быть добавлен к основному модулю »).

Если вы ожидаете более конкретных указаний, добавьте конкретный вопрос:)

...