Can't execute JAR file: no main manifest attribute

Abdul D.
jump to solution

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.

  1. In a terminal, navigate to the src directory and compile the Java code:

    javac -d bin com/example/Main.java
    
  2. In the src directory, create a manifest.txt manifest file with the following content:

    Manifest-Version: 1.0
    Main-Class: com.example.Main
    

    Replace com.example.Main with the fully qualified name of your main class. You can identify the main class as the class containing the public static void main(String[] args) method.

  3. 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 c to create a new JAR file,f to specify the output JAR file name (MyApp.jar), m to include the manifest file (manifest.txt), and -C bin/ . to add the compiled classes from the bin directory.

  4. Test the execution of the JAR file by running the following command:

    java -jar MyApp.jar
    

    In 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.

Sentry