Действительно ли возможно создать “uber” банку, содержащую классы проекта и зависимости проекта как банки с пользовательским файлом манифеста?

Используйте этот код

using System.Threading;
// ...
Thread.Sleep(50);
28
задан Pascal Thivent 2 December 2009 в 22:50
поделиться

4 ответа

На самом деле я не проверял, что maven-shade-plugin работает точно (или любой другой плагин), так как maven 2 имеет все встроенное для создания мегажара или уберджара. Вам просто нужно использовать maven-assembly-plugin с предопределенным дескриптором jar-with-dependencies .

Просто добавьте этот фрагмент в свой pom.xml , чтобы настроить манифест:

<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>

И следующая команда сгенерирует ваш uberjar:

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

Но, опять же, по умолчанию этот дескриптор распаковывает зависимости (например, maven-shade-plugin). Честно говоря, я не понимаю, почему это проблема, но, если это действительно не то, что вы хотите, вы можете использовать свой собственный дескриптор сборки.

Для этого, во-первых, создайте дескриптор сборки, скажем src / assembly / uberjar.xml , со следующим содержимым:

<assembly>
  <id>uberjar</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <useProjectArtifact>false</useProjectArtifact>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
      <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

Затем настройте maven-assembly-plugin для использования этого дескриптора и добавления зависимостей в Class-Path запись манифеста:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <descriptors> 
      <descriptor>src/assembly/uberjar.xml</descriptor>
    </descriptors>
    <archive>
      <manifest>
        <mainClass>my.package.to.my.MainClass</mainClass>
        <addClasspath>true</addClasspath>
      </manifest>
    </archive>
  </configuration>
  <!--
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
  -->
</plugin>

Наконец, запустите mvn assembly: assembly , чтобы создать свой uberjar.

При желании раскомментируйте элемент Executions , чтобы связать плагин сборки с фазой package (и создать сборку как часть обычной сборки).

Assembly для создания вашего уберджара.

При желании раскомментируйте элемент Executions , чтобы связать плагин сборки с фазой package (и создать сборку как часть обычной сборки).

Assembly для создания вашего уберджара.

При желании раскомментируйте элемент Executions , чтобы связать плагин сборки с фазой package (и создать сборку как часть обычной сборки).

59
ответ дан 28 November 2019 в 02:48
поделиться

OneJar имеет плагин maven2 .

6
ответ дан 28 November 2019 в 02:48
поделиться

Раньше я использовал для этого FatJar. http://fjep.sourceforge.net/

Я создал относительно простое приложение, клиенту нужно было дважды щелкнуть исполняемый файл и заставить его работать. Об установщиках или зависимостях не может быть и речи. Fatjar собрал для меня библиотеки проекта и ссылочные файлы из Eclipse в исполняемый jar-файл размером несколько мегабайт. Безупречный.

2
ответ дан 28 November 2019 в 02:48
поделиться

Я знаю два продукта, которые делают это:

  • Один называется «bigjar», но это слишком общий термин, чтобы его можно было использовать в поиске Google; Мне не удалось его найти.
  • Другой называется «onejar». На него довольно много ссылок, и он утверждает, что делает то, что вам нужно.

Вот сообщение от человека, который использует OneJar в сборке Maven:

http://5341.com/list/55/498657. html

0
ответ дан 28 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

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