java - sirve - ¿Qué es un JAR gordo?
para que sirve settitle en java (3)
El frasco gordo es el frasco, que contiene clases de todas las bibliotecas, de las que depende su proyecto y, por supuesto, las clases del proyecto actual.
En diferentes sistemas de compilación, el frasco gordo se crea de forma diferente, por ejemplo, en Gradle uno lo crearía con ( instruction ):
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
}
En Maven se está haciendo de esta manera (después de configurar el jar regular):
<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>
Escuché a la gente decir que crean un JAR gordo y lo implementan. ¿Qué significan en realidad?
En el caso de un contenedor ejecutable, otra forma de pensar sobre un contenedor de grasa es uno que puede ejecutar invocando:
java -jar myFatLibrary.jar
sin la necesidad de -cp
/ --classpath
, o incluso haciendo doble clic en el icono de jar.
Fat jar o uber jar es un jar que contiene todos los archivos y recursos de clase de proyecto empaquetados junto con todas sus dependencias. Existen diferentes métodos para lograr tal efecto:
- Los archivos jar de las dependencias se copian en el contenedor principal y luego se cargan usando un cargador de clases especial (onejar)
- Las jarras de las dependencias se extraen en la parte superior de la jerarquía jar principal (maven-assembly-plugin con su ensamblado jar-with-dependants, maven-shade-plugin con objetivo shade)
A continuación se muestra la configuración del plugin de ensamblaje 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>