2013-10-03 7 views
59

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?

+0

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

+0

@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

+2

Die ursprüngliche Antwort zeigte auf diesen Link: http://www.javacodegeeks.com/2012/11/packing-your-java-application-as-one-or--fat-jar.html –

Antwort

50

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

Also ist "fat jar" nur ein anderer Name für "Uber jar"? – gturri

+6

@gturri Ja, genau. –

+2

Warum einige Drittanbieter-Plugin verwenden, wenn es maven Assembly-Plugin mit seiner Assembly jar-with-dependencies gibt? – MeTTeO

8

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

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.

+0

Beachten Sie, dass -jar Main-Class-Header in MANIFEST.MF erfordert : https://docs.oracle.com/javase/tutorial/deployment/jar/run.html – MeTTeO

+0

Das ist der Fall sogar für nicht-fette Gläser, also wirklich nicht relevant. –