JAR vs WAR - Packaging Java Apps

Nikhil AkkiNikhil Akki
3 min read

I have been working on some legacy Java applications lately, and I was going through a lot of terminologies, concepts from the Java eco-system. In this post, I cover a brief comparision between WAR (Web Application Archive) and JAR (Java Archive).

Both files are both packaging formats used in Java, but they serve different purposes and are used in different contexts. Here's a comparison to highlight their differences:

JAR (Java Archive)

  • Purpose: JAR files are used to package Java classes, resources, and metadata into a single file for distribution and deployment.

  • Contents: Typically contain compiled Java .class files, along with auxiliary files such as configuration files, libraries (JARs), and other resources.

  • Usage: Commonly used for general Java applications, libraries, and utilities. It can be executed if it contains a Main-Class entry in the MANIFEST.MF file.

  • Structure: The structure of a JAR file is simple, containing a META-INF directory and other directories and files as needed by the application or library.

  • Example: Packaging a Java library to be used by other applications.

WAR (Web Application Archive)

  • Purpose: WAR files are used to package web applications that follow the Java Servlet specification. They are specifically designed for web servers and application servers.

  • Contents: Typically contain web-related resources such as JSP files, HTML files, JavaScript files, CSS files, images, along with Java classes (compiled servlets and other classes), and web-specific configurations (e.g., web.xml).

  • Usage: Deployed to web servers or application servers (like Apache Tomcat, Jetty, JBoss, etc.) to run Java web applications.

  • Structure: Has a specific directory structure:

    • META-INF/: Contains the MANIFEST.MF file.

    • WEB-INF/: Contains the following:

      • web.xml: Deployment descriptor.

      • classes/: Compiled Java classes.

      • lib/: JAR files used by the web application.

      • Other configuration files and resources.

  • Example: Packaging a Java web application to be deployed on a server like Tomcat.

Key Differences

  • Usage Context:

    • JAR: General-purpose Java packaging format, used for any Java application or library.

    • WAR: Specialized for web applications and used specifically in the context of web servers and application servers.

  • Structure:

    • JAR: Simple directory structure with META-INF.

    • WAR: More complex directory structure with META-INF and WEB-INF, the latter containing web application-specific resources and configurations.

  • Deployment:

    • JAR: Can be executed as a standalone application if it has an executable entry point.

    • WAR: Deployed within a web server or application server environment, not standalone.

In summary, while both JAR and WAR files are used to package Java applications, JAR files are for general Java programs and libraries, and WAR files are specifically for web applications that need to be deployed on a web server.

Image Attribution

1
Subscribe to my newsletter

Read articles from Nikhil Akki directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Nikhil Akki
Nikhil Akki

I am a Full Stack Solution Architect at Deloitte LLP. I help build production grade web applications on major public clouds - AWS, GCP and Azure.