Как объединить банки модулей в одну банку в Maven2?

У меня есть проект maven2 с несколькими модулями jar, сборка проекта получит архивы .jar для каждого модуля в каталоге modules / XYZ / target / XYZ-x.x.x.jar

Теперь, если мой проект P имеет версию P-p.q.r, и я хочу сгенерировать одну банку P-p.q.r-all.jar со всеми включенными подмодулями, как мне это сделать?


person Xiè Jìléi    schedule 13.12.2009    source источник


Ответы (2)


arrow_upward
19
arrow_downward

То, что вы хотите достичь, называется uber jar. Этот модуль должен иметь зависимости от всех остальных подмодулей, которые вы хотите упаковать в одну банку. Если вы создадите другой подмодуль, который будет создавать желаемый артефакт, он может быть построен в реакторе со всеми его зависимостями, но если это будет отдельный проект, вам необходимо установить все зависимости uber jar.

| parent
| -- submodule1
...
| -- submoduleN
| -- uberjarSubmodule

Uber jar можно сделать, используя:

  1. maven-shade-plugin - в вашем случае вы должны не забыть исключить транзитивные зависимости от ваших модулей

    <project>
    ...
    <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.2</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <artifactSet>
                <excludes>
                  <exclude>classworlds:classworlds</exclude>
                  <exclude>junit:junit</exclude>
                  <exclude>jmock:jmock</exclude>
                  <exclude>xml-apis:xml-apis</exclude>
                </excludes>
              </artifactSet>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
    </build>
    ...
    </project>
    
  2. maven-assembly-plugin - в этот вопрос вы найдете подробный ответ

person cetnar    schedule 13.12.2009

arrow_upward
1
arrow_downward

Зависит от того, как вы собираетесь это отправить, если ваш jar - это библиотека, которую вы хотите, чтобы другие разработчики загружали и использовали через maven. Вы должны указать их как зависимости в проекте pom.

Если вы пытаетесь отправить что-то конечному пользователю, который просто хочет получить двоичный файл и использовать ваш проект, вы можете попробовать использовать сборка для упаковки вашего проекта. С помощью этого плагина вы можете упаковать jar вместе с его зависимостями. Он не поместит все это в один файл jar, но если вы правильно настроите путь к классам пользователей, это не имеет значения.

person Clinton    schedule 13.12.2009