Can't execute JAR file: no main manifest attribute
The Problem
I get a “no main manifest attribute” error when I try to execute a JAR file in Java.
no main manifest attribute, in /Users/User/test/app.jar
The Solution
This error occurs when you try to execute a JAR file without a properly specified Main-Class attribute in its manifest file. The Main-Class attribute tells the Java runtime which class contains the main() method used to start execution.
Specify the Main-Class in the Manifest File
To resolve the error, you need to create a manifest file that indicates which class is the main class of your application.
We’ll demonstrate this process using the example of a simple Java application with the following Main class:
package com.example;
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
The project structure for this example looks as follows:
src
└── com
└── example
└── Main.java
We’ll use the following steps to create an executable JAR file with a manifest file specifying this class.
-
In a terminal, navigate to the
srcdirectory and compile the Java code:javac -d bin com/example/Main.java -
In the
srcdirectory, create amanifest.txtmanifest file with the following content:Manifest-Version: 1.0 Main-Class: com.example.MainReplace
com.example.Mainwith the fully qualified name of your main class. You can identify the main class as the class containing thepublic static void main(String[] args)method. -
Create the JAR file and include the manifest with a command similar to the one below:
jar cfm MyApp.jar manifest.txt -C bin/ .This command uses
cto create a new JAR file,fto specify the output JAR file name (MyApp.jar),mto include the manifest file (manifest.txt), and-C bin/ .to add the compiled classes from thebindirectory. -
Test the execution of the JAR file by running the following command:
java -jar MyApp.jarIn this example, a correctly defined manifest will output the following message:
Hello, World!
Alternatively Use an IDE to Generate the JAR File
If you’re using an IDE like IntelliJ IDEA or Eclipse, you can use the built-in export tools to automatically generate a JAR file with the correct manifest. Be sure to specify the main class during the export process.
Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.