views:

864

answers:

5

I built a jar using IntelliJ, setting the main class properly.

When I run "java -jar foo.jar" from the command line (Windows), I get an exception that claims the main file is missing. The main class looks something like:

package mypackage;

public class LockUtil {
  public static void main(String[] args) {
  ...

I'm getting the following exception:

Exception in thread "main" java.lang.NoClassDefFoundError: mypackage/LockUtil
Caused by: java.lang.ClassNotFoundException: mypackage.LockUtil
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: mypackage.LockUtil. Program will exit.

The manifest file contains:

Manifest-Version: 1.0
Created-By: IntelliJ IDEA
Main-Class: mypackage.LockUtil

And the jar contains the appropriate directory structure with the .class file.

A: 

You're trying to execute mypackage.LockUtil, but you should use mypackage.locking.LockUtil (note the package statement at the beginning of the class.).

Another possibility is that you have moved the class and forgot the update the package statement.

andri
Sorry, it was a mistake in the posting - the actual package name is correct though... (I updated the question)
ripper234
A: 

It seems that the name of your package is mypackage.locking and not only mypackage

LB
A: 

It appears that your main-class definition in your manifest is pointing at mypackage/LockUtil rather than mypackage/locking/LockUtil.

-Rick

Rick
+1  A: 

If you do java -tf foo.jar, do you see something like this?

META-INF/
META-INF/MANIFEST.MF
mypackage/
mypackage/LockUtil.class

Could it be that there is another directory level in there somewhere?

You can be sure that Java knows the main file is there by building the jar file with something like this:

jar cfe foo.jar mypackage.LockUtil mypackage/LockUtil.class
lavinio
A: 

Does LockUtil have a dependency on another class that is not resolvable, thereby not allowing LockUtil to load?

Robin