Java creating .jar file
Categories:
Mastering Java .jar Files: Creation, Execution, and Distribution

Learn how to package your Java applications into executable .jar files for easy distribution and deployment. This guide covers the jar
command, manifest files, and common use cases.
Java Archive (JAR) files are a fundamental part of the Java ecosystem, serving as a package format for aggregating many files into one. They are primarily used to distribute Java classes and associated metadata, resources (text, images, etc.), and sometimes even entire applications. Understanding how to create, manage, and execute JAR files is crucial for any Java developer looking to deploy their applications efficiently.
What is a .jar File?
A .jar file is essentially a ZIP file that contains compiled Java bytecode (.class files), an optional manifest file, and other resources like images, audio, or configuration files. The manifest file (META-INF/MANIFEST.MF
) is particularly important as it can specify metadata about the archive, such as the main class to execute, version information, and dependencies. This allows a JAR file to be directly executable, making it a convenient way to distribute Java applications.
flowchart TD A[Java Source Code (.java)] --> B[Java Compiler (javac)] B --> C[Java Bytecode (.class)] C --> D{"Other Resources (images, config)"} D --> E[JAR Tool (jar)] E --> F[Manifest File (META-INF/MANIFEST.MF)] F --> G[Executable .jar File]
Process of creating an executable .jar file from source code.
Creating a Basic .jar File
The jar
command-line tool, included with the Java Development Kit (JDK), is used to create and manage JAR files. The simplest way to create a JAR is to archive a set of compiled class files or an entire directory structure. Let's assume you have a simple Java application with a Main.java
file that prints 'Hello, JAR!'. First, compile your Java code.
javac Main.java
Compiling your Java source file.
This will produce Main.class
. Now, to create a JAR file containing this class, you can use the jar
command with the cvf
options:
jar cvf MyFirstJar.jar Main.class
Creating a basic JAR file named MyFirstJar.jar
.
cvf
options stand for: c
(create new archive), v
(generate verbose output), and f
(specify archive file name).Creating an Executable .jar File with a Manifest
For a JAR file to be directly executable using java -jar
, it needs a manifest file that specifies the 'Main-Class' attribute. This attribute tells the Java Virtual Machine (JVM) which class contains the public static void main(String[] args)
method to start the application. You can create a manifest file manually or let the jar
tool generate one for you.
Let's create a manifest.txt
file with the following content:
Main-Class: Main
Content of manifest.txt
specifying the main class.
Main-Class
line in your manifest.txt
file. Without it, the jar
tool might not correctly parse the manifest, leading to a 'no main manifest attribute' error during execution.Now, use the jar
command with the m
option to include this manifest file:
jar cvfm MyExecutableJar.jar manifest.txt Main.class
Creating an executable JAR file using a custom manifest.
You can now execute this JAR file directly:
java -jar MyExecutableJar.jar
Executing the newly created JAR file.
Packaging an Entire Project Directory
For larger projects, you'll typically have multiple .class
files organized in packages. The jar
tool can archive entire directory structures. Suppose your compiled classes are in a build/classes
directory, and your main class is com.example.app.Main
.
1. Compile your project
Ensure all your Java source files are compiled into .class
files and placed in a designated output directory (e.g., build/classes
).
javac -d build/classes src/com/example/app/*.java
2. Create a manifest file
Create a manifest.txt
file, specifying the fully qualified name of your main class.
Main-Class: com.example.app.Main
3. Create the JAR file
Navigate to the directory above your build/classes
directory (or specify the path correctly) and use the jar
command.
jar cvfm MyApp.jar manifest.txt -C build/classes .
The -C build/classes .
part tells jar
to change to the build/classes
directory and then include all files (.
) from there into the JAR, preserving the package structure.
4. Execute the JAR file
Run your application using the java -jar
command.
java -jar MyApp.jar