Включая зависимости в банке со Знатоком

У Henrik Kniberg Управление версиями для Нескольких Гибких Команд также есть некоторые положительные стороны для учета.

328
задан James McMahon 2 May 2012 в 09:50
поделиться

4 ответа

Вы можете сделать это, используя плагин maven-assembly с дескриптором «jar-with-dependencies». Вот соответствующий фрагмент из одного из наших pom.xml, который делает это:

  <build>
    <plugins>
      <!-- any other plugins -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
458
ответ дан 23 November 2019 в 00:48
поделиться

Если отложить Maven в сторону, вы можете поместить библиотеки JAR внутрь Main Jar, но вам нужно будет использовать собственный загрузчик классов.

Отметьте этот проект: One-JAR текст ссылки

1
ответ дан 23 November 2019 в 00:48
поделиться

Там есть плагин shade maven . Его можно использовать для упаковки и переименования зависимостей (чтобы исключить проблемы с зависимостями в пути к классам).

18
ответ дан 23 November 2019 в 00:48
поделиться

В Maven 2 правильный способ сделать это - использовать Maven2 Assembly Plugin , который имеет для этой цели файл предопределенного дескриптора . и что вы могли бы просто использовать в командной строке:

mvn assembly:assembly -DdescriptorId=jar-with-dependencies

Если вы хотите сделать эту банку исполняемой, просто добавьте основной класс для запуска в конфигурацию плагина:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>my.package.to.my.MainClass</mainClass>
      </manifest>
    </archive>
  </configuration>
</plugin>

Если вы хотите создать эту сборку как часть В обычном процессе сборки вы должны привязать цель single или directory-single (цель assembly должна запускаться ТОЛЬКО из командной строки) с фазой жизненного цикла ( package имеет смысл), что-то вроде этого:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <id>create-my-bundle</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        ...
      </configuration>
    </execution>
  </executions>
</plugin>

Адаптируйте элемент конфигурации в соответствии со своими потребностями (например, с декларативным материалом, как произносится).

132
ответ дан 23 November 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: