Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Xiè JìléiОтветов: 2

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

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

maven-2

Ответы

Ответ 1 · рейтинг 19 · cetnar

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

Ответ 2 · рейтинг 1 · Clinton

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы