Ho sentito dire che creano un JAR grasso e lo distribuiscono. Cosa significano in realtà?Cos'è un JAR grasso?
risposta
Il barattolo di grasso è il barattolo, che contiene le classi di tutte le librerie, da cui dipende il progetto e, naturalmente, le classi del progetto corrente.
In diversi vaso sistemi di compilazione grasso viene creato in modo diverso, ad esempio, in Gradle uno creerebbe 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
}
In Maven è stato fatto in questo modo (dopo aver impostato barattolo regolare):
<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>
Il vaso di grasso o il vaso uber è un contenitore che contiene tutti i file di classe del progetto e le risorse imballate insieme con tutte le sue dipendenze. Esistono diversi metodi per ottenere tale effetto:
- dipendenze vasetti vengono copiate nel vaso principale e poi caricati utilizzando speciali classe loader (onejar)
- dipendenze vasetti vengono estratti nella parte superiore della gerarchia vaso principale (maven aSSEMBLAGGIO-plugin con il suo vaso-con-dipendenze assemblaggio, Maven-ombra-plugin con obiettivo ombra)
Qui di seguito campione di assemblaggio di configurazione del 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>
Nel caso di un jar eseguibile, un altro modo di pensare a un barattolo di grasso è quella che si può eseguire invocando:
java -jar myFatLibrary.jar
senza la necessità di -cp
/--classpath
, o anche fare doppio clic sull'icona vaso.
Ricordare che -jar richiede l'intestazione Main-Class in MANIFEST.MF : https://docs.oracle.com/javase/tutorial/deployment/jar/run.html – MeTTeO
Questo è il caso anche per i barattoli non grassi, quindi non rilevanti in realtà. –
quando si desidera spedire il prodotto come jar normalmente si desidera mettere le classi in tutti i jar dipendenti in un unico file jar grande. – 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- domande – eis
La risposta originale stava indicando questo collegamento: http://www.javacodegeeks.com/2012/11/packing-your-java-application-as-one-or-fat-jar.html –