Ich habe gehört, dass Leute sagen, dass sie ein fettes JAR erstellen und es bereitstellen. Was bedeuten sie eigentlich?Was ist ein fettes JAR?
Antwort
Das Fettglas ist das Glas, das Klassen aus allen Bibliotheken enthält, von denen Ihr Projekt abhängt und natürlich die Klassen des aktuellen Projekts.
In verschiedenem Build-Systemen Fett Glas ist anders gestaltet, zum Beispiel in Gradle man es mit (instruction) schaffen würde:
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 es auf diese Weise getan wird (nach dem regulären jar Einrichtung):
<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 oder über jar ist ein jar, das alle Projektklassen-Dateien und Ressourcen zusammen mit all seinen Abhängigkeiten enthält. Es gibt verschiedene Methoden zum Erreichen einer solchen Wirkung:
- Abhängigkeiten Gläser werden in den Haupt jar kopiert und geladen dann Sonderklasse Loader (onejar)
- Abhängigkeiten Gläser an der Spitze der Haupt jar Hierarchie extrahiert (Maven -Montage-Plugin mit seinem Glas-mit-Abhängigkeiten Montage, maven-Schatten-Plug-In mit Schatten Ziel)
Unterhalb Probenanordnung Plugin-Konfiguration 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>
Im Falle einer ausführbaren Jar, eine andere Art und Weise zu einem Fett Glas zu denken ist, die Sie durch den Aufruf ausführen:
java -jar myFatLibrary.jar
ohne die Notwendigkeit für -cp
/--classpath
oder sogar einen Doppelklick auf das Glas-Symbol.
Beachten Sie, dass -jar Main-Class-Header in MANIFEST.MF erfordert : https://docs.oracle.com/javase/tutorial/deployment/jar/run.html – MeTTeO
Das ist der Fall sogar für nicht-fette Gläser, also wirklich nicht relevant. –
Wenn Sie Ihr Produkt als JAR versenden möchten, müssen Sie normalerweise Klassen in alle abhängigen JAR-Dateien in eine einzige große JAR-Datei einfügen. – Nishu
@Nadeem_MK http://meta.stackexchange.com/questions/5280/embrace-the-non-googlers http://meta.stackexchange.com/questions/8724/how-should-we-deal-with-google- Fragen – eis
Die ursprüngliche Antwort zeigte auf diesen Link: http://www.javacodegeeks.com/2012/11/packing-your-java-application-as-one-or--fat-jar.html –