Что такое жирная банка?
Я слышал, как люди говорят, что они создают жирную банку и развернуть его. Что они на самом деле означают ?
3 ответа:
жирная банка-это банка, которая содержит классы из всех библиотек, от которых зависит ваш проект и, конечно же, классы текущего проекта.
в разных системах сборки 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 }
в Maven это делается таким образом (после настройки обычной банки):
<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>
Fat jar или uber jar-это jar, который содержит все файлы класса проекта и ресурсы, упакованные вместе со всеми его зависимостями. Существуют различные способы достижения такого эффекта:
- банки зависимостей копируются в основную банку, а затем загружаются с помощью специального загрузчика классов (onejar)
- банки зависимостей извлекаются в верхней части основной иерархии jar (maven-assembly-plugin с его сборкой jar-with-dependencies, maven-shade-plugin с оттенком гол)
ниже пример конфигурации плагина сборки 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>