Как объединить банки модулей в одну банку в 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)


То, что вы хотите достичь, называется 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

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

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

person Clinton    schedule 13.12.2009