World Library  
Flag as Inappropriate
Email this Article

JAR (file format)

Article Id: WHEBN0000265609
Reproduction Date:

Title: JAR (file format)  
Author: World Heritage Encyclopedia
Language: English
Subject: WAR (file format), EAR (file format), Classpath (Java), Java (programming language), Java Classloader
Collection: Archive Formats, Java Platform
Publisher: World Heritage Encyclopedia

JAR (file format)

Java Archive
KDE JAR file icon
Filename extension .jar
Internet media type application/java-archive[1][2]
Uniform Type Identifier (UTI)
Developed by Netscape, Sun Microsystems, Oracle Corporation
Type of format File archive, data compression
Extended from ZIP

In software, JAR (Java Archive) is a package file format typically used to aggregate many Java class files and associated metadata and resources (text, images, etc.) into one file to distribute application software or libraries on the Java platform.[3]

JAR files are fundamentally archive files, built on the ZIP file format and have the .jar file extension. Computer users can create or extract JAR files using the jar command that comes with a JDK. They can also use zip tools to do so; however, the order of entries in the zip file headers is important when compressing, as the manifest often needs to be first. Inside a JAR, file names are unicode text.[4]


  • Design 1
    • Executable JAR files 1.1
  • Manifest 2
    • Specifications 2.1
      • Special-Purpose Manifest Headers 2.1.1
      • Applications Bundled as JAR Files 2.1.2
      • Package Sealing 2.1.3
    • Package Versioning 2.2
      • Specify Dependencies 2.2.1
  • Apache Ant Zip/JAR support 3
  • Related formats 4
  • See also 5
  • References 6
  • External links 7


A JAR file allows Java runtimes to efficiently deploy a set of classes and their associated resources. The elements in a JAR file can be compressed, which, together with the ability to download an entire application in a single request, makes downloading a JAR file much more convenient than separately downloading the many uncompressed files which would form a single Java Application. The package contains classes that read and write JAR files.

A JAR file has an optional manifest file located in the path META-INF/MANIFEST.MF. The entries in the manifest file determine how one can use the JAR file. For instance, a Classpath entry can be used to specify other JAR files for loading with the JAR. This entry consists of a list of absolute or relative paths to other JAR files. Although intended to simplify JAR use, in practice it turns out to be notoriously brittle, as it depends on all the relevant JARs being in the exact locations specified when the entry-point JAR was built. To change versions or locations of libraries, a new manifest is needed.

To extract the contents of a JAR file users can use any standard unzip software, or the jar command which comes with every Java Virtual Machine: "jar -xf foo.jar".

Developers can digitally sign JAR files. In that case, the signature information becomes part of the embedded manifest file. The JAR itself is not signed, but instead every file inside the archive is listed along with its checksum; it is these checksums that are signed. Multiple entities may sign the JAR file, changing the JAR file itself with each signing, although the signed files themselves remain valid. When the Java runtime loads signed JAR files, it can validate the signatures and refuse to load classes that do not match the signature. It can also support 'sealed' packages, in which the Classloader will only permit Java classes to be loaded into the same package if they are all signed by the same entities. This prevents malicious code from being inserted into an existing package, and so gaining access to package-scoped classes and data.

Developers can obfuscate JAR files so that a user of the JAR file doesn't get much information regarding the code it contains, or to reduce its size, which is useful in Embedded system development, where space may be limited.

Executable JAR files

An executable Java program can be packaged in a JAR file, along with any libraries the program uses. Executable JAR files have the manifest specifying the entry point class with Main-Class: myPrograms.MyClass and an explicit Class-Path (and the -cp argument is ignored). Some operating systems can run these directly when clicked. The typical invocation is "java -jar foo.jar" from a command line.

Native launchers can be created on most platforms. For instance Microsoft Windows users who prefer having Windows EXE files can use tools such as JSmooth, Launch4J, WinRun4J or Nullsoft Scriptable Install System to wrap single JAR files into executables.


On the Java platform, a Manifest file is a specific file contained within a JAR archive.[5][6] It is used to define extension and package-related data. It is a metadata file that contains name-value pairs organized in different sections. If a JAR file is intended to be used as an executable file, the manifest file specifies the main class of the application. The manifest file is named MANIFEST.MF.

It is not uncommon to find a computer file described as a manifest in situations unrelated to Java.


A JAR file includes a manifest at the canonical location META-INF/MANIFEST.MF.[7] There can be only one manifest file in an archive, and it must be in the META-INF directory.

The content of the Manifest file in a JAR file created with version 1.0 of the Java Development Kit is the following.

Manifest-Version: 1.0

All the entries are as name-value pairs. The name of a header is separated from its value by a colon. The default manifest shows that it conforms to version 1.0 of the manifest specification.

The manifest can also contain information about the other files that are packaged in the archive. Exactly what file information is recorded in the manifest will depend on the intended use for the JAR file. The default manifest file makes no assumptions about what information it should record about other files, so its single line contains data only about itself.

Special-Purpose Manifest Headers

Depending on the intended role of the JAR file, the default manifest may have to be modified. If the JAR file is created only for the purpose of archival, then the MANIFEST.MF file is of no purpose.

Most uses of JAR files go beyond simple archiving and compression and require special information to be in the manifest file. Summarized below are brief descriptions of the headers that are required for some special-purpose JAR-file functions

Applications Bundled as JAR Files

If an application is bundled in a JAR file, the Java Virtual Machine needs to be told what the entry point to the application is. An entry point is any class with a public static void main(String[] args) method. This information is provided in the Main-Class header, which has the general form:

Main-Class: com.example.MyClassName

In this example, com.example.MyClassName.main() will be executed.

Package Sealing

A package within a JAR file can be optionally sealed, which means that all classes defined in that package must be archived in the same JAR file. A package might be sealed to ensure version consistency among the classes in the software or as a security measure.

To seal a package, a Name header needs to be added for the package, followed by a Sealed header, similar to this:

Name: myCompany/myPackage/
Sealed: true

The Name header's value is the package's relative pathname. Note that it ends with a '/' to distinguish it from a filename. Any headers following a Name header, without any intervening blank lines, apply to the file or package specified in the Name header. In the above example, because the Sealed header occurs after the Name: myCompany/myPackage header, with no blank lines between, the Sealed header will be interpreted as applying (only) to the package myCompany/myPackage.

Package Versioning

The Package Versioning specification defines several manifest headers to hold versioning information. One set of such headers can be assigned to each package. The versioning headers should appear directly beneath the Name header for the package. This example shows all the versioning headers:

Name: java/util/
Specification-Title: "Java Utility Classes"
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util"
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."

Specify Dependencies

The MANIFEST.MF file can be used to specify all the classes that must be loaded for an application to be able to run. Source: the sun servlet specification, page 72 (servlet-2_4-fr-spec.pdf). See also the Java Tech Notes.

Note that Class-Path entries are delimited with spaces, not with the system path delimiter:

Class-Path: . pkg1.jar path/to/pkg2.jar

Apache Ant Zip/JAR support

The Apache Software Foundation license and is designed to be usable outside Ant.

Related formats

Several related file formats build on the JAR format:

  • WAR (Web application archive) files, also Java archives, store XML files, Java classes, JavaServer Pages and other objects for Web Applications.
  • RAR (resource adapter archive) files (not to be confused with the RAR file format), also Java archives, store XML files, Java classes and other objects for J2EE Connector Architecture (JCA) applications.
  • EAR (enterprise archive) files provide composite Java archives which combine XML files, Java classes and other objects including JAR, WAR and RAR Java archive files for Enterprise Applications.
  • SAR (service archive) is similar to EAR. It provides a service.xml file and accompanying JAR files.
  • APK (Android Application Package), a variant of the Java archive format, is used for Android applications.[8]

See also


  1. ^ "File Extension .JAR Details". Retrieved 29 November 2012. 
  2. ^ "MIME : Java Glossary". Retrieved 29 November 2012. 
  3. ^ Java Archive (JAR) Files
  4. ^
  5. ^ "Understanding the Manifest". 2003-03-21. Retrieved 2012-07-31. 
  6. ^ "JAR File Specification". Retrieved 2012-07-31. 
  7. ^ "JAR File Specification". Retrieved 2012-07-31. 
  8. ^ Android Developer's Guide

External links

  • JAR File Overview
  • JAR File Specification
  • Original JAR File Specification
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.

Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.