Вопрос-ответ

What is a fat JAR? [duplicate]

Что такое fat JAR?

Я слышал, как люди говорят, что они создают fat JAR и развертывают его. Что они на самом деле имеют в виду?

Переведено автоматически
Ответ 1

Разные названия - это просто способы упаковки Java-приложений.

Skinny – Содержит только биты, которые вы буквально вводите в свой редактор кода, и ничего больше.

Тонкий – Содержит все вышеперечисленное плюс прямые зависимости приложения от вашего приложения (драйверы БД, служебные библиотеки и т.д.).

Полый - обратная сторона thin . Он содержит только биты, необходимые для запуска вашего приложения, но не содержит само приложение. По сути, это предварительно упакованный ”сервер приложений", на котором вы можете позже развернуть свое приложение, в том же стиле, что и традиционные серверы приложений Java EE, но с важными отличиями.

Fat / Uber – Содержит бит, который вы буквально пишете сами, плюс прямые зависимости вашего приложения, ПЛЮС биты, необходимые для запуска вашего приложения “само по себе”.

Источник: Статья от Dzone

Визуальное представление типов JAR

Ответ 2

Fat jar - это jar, который содержит классы из всех библиотек, от которых зависит ваш проект, и, конечно же, классы текущего проекта.

В разных системах сборки fat jar создается по-разному, например, в Gradle его можно создать с помощью (инструкции):

task fatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'com.example.Main'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}

In Maven it's being done this way (after setting up regular jar):

<pluginRepositories>
<pluginRepository>
<id>onejar-maven-plugin.googlecode.com</id>
<url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
</pluginRepository>
</pluginRepositories>
<!-- ... -->

<plugin>
<groupid>org.dstovall</groupid>
<artifactid>onejar-maven-plugin</artifactid>
<version>1.4.4</version>
<executions>
<execution>
<configuration>
<onejarversion>0.97</onejarversion>
<classifier>onejar</classifier>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Ответ 3

Fat jar or uber jar is a jar which contains all project class files and resources packed together with all it's dependencies. There are different methods for achieving such effect:


  • dependencies' jars are copied into main jar and then loaded using special class loader (onejar, spring-boot-plugin:repackage)

  • dependencies' jars are extracted at the top of main jar hierarchy (maven-assembly-plugin with it's jar-with-dependencies assembly)

  • dependencies' jars are unpacked at the top of main jar hierarchy and their packages are renamed (maven-shade-plugin with shade goal)

Below sample assembly plugin configuration jar-with-dependencies:

<project>
<!-- ... -->
<build>
<!-- ... -->
<plugins>
<plugin>
<!-- NOTE: We don't need a groupId specification because the group is
org.apache.maven.plugins ...which is assumed by default.
-->

<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<classifier>
</configuration>
<!-- ... -->
</project>

For more detailed explanation: Uber-JAR at imagej.net

Ответ 4

In the case of an executable jar, another way to think about a fat jar is one you can execute by invoking:

java -jar myFatLibrary.jar

without the need for -cp / --classpath, or even double clicking the jar icon.

java jar