Java - (Jar|Java ARchive) File

Java Conceptuel Diagram

Java - (Jar|Java ARchive) File

About

JAR stands for Java ARchive and is file format born in 1996 as a simple extension of the popular ZIP archive format with class and other required resource files:

  • signature files
  • images, sounds

The primary motivation for its development was so that Java applets and their requisite components (files, images and sounds) can be downloaded to a browser in a single HTTP transaction, rather than opening a new connection for each piece.

With the advent of the Main-Class manifest header, entire applications can be delivered.

Hell

Jar hell is a term similar to describe all the various ways in which the class loading process can end up not working.

To avoid a Jar hell, the shading technique can be used.

Management

Name

Jar Archive name follows the coordinate schema.

Create

You can create JAR files, either:

  • by using the JAR utility directly,
  • through an IDE such as Oracle JDeveloper, Eclipse, …
  • or by using a build tool such as the ant utility, maven or gradle.

With the jar command-line utility.

jar cf myPackage.jar *.class

where:

  • 'c': create new archive.
  • 'f': create a file.

Create an Executable Jar

Creating a executable jar file needs more steps:

echo Main-Class: com.gerardnico.HelloWorld>myManifest
md build\jar
jar cfm build\jar\HelloWorld.jar myManifest -C build\classes

Execute

  • an executable JAR
java -jar myJAR.jar
java -jar myJAR.jar com.example.main arg1 arg2

Verify / Sign

  • jarsigner: You use the jarsigner tool to sign and verify Java Archive (JAR) files.

Verification

jar tf build/libs/building-java-libraries.jar
META-INF/
META-INF/MANIFEST.MF
Library.class

You should see the required manifest file —MANIFEST.MF— and the compiled class.

Search class

Windows

for /R %G in (*.jar) do @jar -tvf "%G" | find "ClassName" > NUL && echo %G

where:

  • <wrap>for /R %G in (*.jar) do</note>

    loop over all JAR files in the directory tree, store the file name in %G. See Dos - For Statement

  • <wrap>@jar -tvf %G |</note>

    - run the Java Archive command to list all file names within the given archive, and write the results to standard output; the @ symbol suppresses the echoing of the command to standard output.

  • <wrap>find “ClassName” > NUL</note>

    - search standard input, piped from the output of the jar command, for the given class name. It will set ERRORLEVEL to 1 if there's a match (otherwise 0). See DOS - Find Command.

  • <wrap>&& echo %G</note>

    - if ERRORLEVEL is non-zero, write the Java archive file name to standard output (the console). See the AND control opertaor (&&)

Linux

  • below a certain location
find path/to/jars -name "*.jar" -exec grep -Hsli ClassName  {} \;
  • anywhere
for i in $(locate "*.jar");
  do echo $i; jar -tvf $i | grep -Hsi ClassName;
done





Discover More
Java Conceptuel Diagram
How to distribute your (Desktop) Java application to your users ?

An article that 1001 ways to bring your application to your users. This page talks especially over Desktop and Command application because Web Application Packaing is dependent of your web framework ?...



Share this page:
Follow us:
Task Runner