In this quick tutorial, we’ll focus on the differences between JAR and WAR packaging in Java.
First, we'll define each packaging option separately. Afterwards, we'll summarize their differences.
2. JAR Packaging
Simply put, JAR – or Java Archive – is a package file format. JAR files have the .jar extension and may contain libraries, resources, and metadata files.
Essentially, it's a zipped file containing the compressed versions of .class files and resources of compiled Java libraries and applications.
For example, here's a simple JAR file structure:
META-INF/ MANIFEST.MF com/ baeldung/ MyApplication.class
The META-INF/MANIFEST.MF file may contain additional metadata about the files stored in the archive.
3. WAR Packaging
WAR stands for Web Application Archive or Web Application Resource. These archive files have the .war extension and are used to package web applications that we can deploy on any Servlet/JSP container.
Here's an example layout of a typical WAR file structure:
META-INF/ MANIFEST.MF WEB-INF/ web.xml jsp/ helloWorld.jsp classes/ static/ templates/ application.properties lib/ // *.jar files as libs
Inside, it has a META-INF directory holding useful information in the MANIFEST.MF about the web archive. The META-INF directory is private and can't be accessed from the outside.
On the other hand, it also contains the WEB-INF public directory with all the static web resources, including HTML pages, images, and JS files. Moreover, it contains the web.xml file, servlet classes, and libraries.
We can use the same tools and commands that we used to build a JAR to build a .war archive.
4. Key Differences
So, what are the key differences between these two archive types?
The first and most obvious difference is the file extension. JARs have the .jar extension, whereas the WAR file has the .war extension.
The second main difference is their purpose and the way they function. JAR files allow us to package multiple files in order to use it as a library, plugin, or any kind of application. On the other hand, WAR files are used only for web applications.
The structure of the archives is also different. We can create a JAR with any desired structure. In contrast, WAR has a predefined structure with WEB-INF and META-INF directories.
Finally, we can run a JAR from the command line if we build it as an executable JAR without using additional software. Or, we can use it as a library. In contrast, we need a server to execute a WAR.
In this quick article, we compared the .jar and .war Java packaging types. In doing so, we also noted that while both use the same ZIP file format, there are several important differences.