Mansur Nashaev
Mansur Nashaev

Reputation: 313

Cannot run jar file: Could not find or load main class Hello

I create jar file in IDEA Build>Build Artifacts. But can't run it with java -jar jarname.jar - Error: Could not find or load main class Hello. MANIFEST.MF file is in the /resources/META-INF/ folder. And here is the launcher class:

public class Hello {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }

}

MANIFEST.MF:

Manifest-Version: 1.0
Main-Class: Hello

enter image description here


EDIT: Added artifacts setting screenshot

enter image description here

Upvotes: 3

Views: 20316

Answers (3)

reihaneh
reihaneh

Reputation: 17

If your jar file build correctly. try java -jar hello.jar Hello

Upvotes: -2

Brion
Brion

Reputation: 746

enter image description here

You go to project structure then choose "Artifacts" from the left tab. Add a new artifact and as you see here although I have a manifest selected and a Main class selected, on the left side it shows what it will add to the jar. On the right side it shows what's available(un-added). However, since I haven't added anything into my jar yet, it will only add the Manifest and none of the actual code.

You need to specify that you want to add the compile output to the jar or else it will only have the manifest and not your actual classes. You can do that by just double clicking on it. If you specify the directory above the compiled output, it will add the src as well I believe.

Update: Add external dependencies

enter image description here

enter image description here

Upvotes: 9

loesak
loesak

Reputation: 1613

i believe your manifest file must say what the main class is if you want it to auto execute.

Main-Class: Hello

otherwise you need to specify it on the command line when attempting to execute the jar. As far as how to do that with IntelliJ, I can't help you there.

java -cp hello.jar Hello

Note that the reference to the class with the main method is the fully qualified location (package.classname) but since your class has the default package, its not necessary.

Upvotes: 1

Related Questions