It’s been too long since I’ve last done Java, and I can’t remember why the following happens:
Given this file, created by a standard Maven project, as can be seen here: Maven Tutorial
package com.mycompany.app;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
Compiling this, not even with Maven but with the standard javac executable, will generate a class file without errors. Try to run the class file, and you get this error:
Exception in thread "main" java.lang.NoClassDefFoundError: App (wrong name: com/mycompany/app/App)
Remove the package command, compile again and it runs just fine. Why is this? I’m running JDK 1.6.0_21 btw.
One thing you must do after creating a package for the class is to create nested subdirectories to represent package hierachy of the class. In your case the package name is “com.mycompany.app” so the
App.class(compiled App.java file) should reside in “com/mycompany/app” sub-directory. It doesn’t matter where the source file is residing though. For example, I have copied your file and did the following:Please read Wikipedia page about Java Packages for more information. You can also take a look at these links:
Good luck!