$cat JarTest.java
package edu.testjava.simple;
public class JarTest
{
public static void main(String args[])
{
System.out.println("Hello World\n");
}
}
$javac JarTest.java
$java JarTest
I get error:
Exception in thread "main" java.lang.NoClassDefFoundError: JarTest (wrong name: edu/testjava/simple/JarTest)
at java.lang.ClassLoader.defineClass1(Native Method)
a开发者_StackOverflowt java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: JarTest. Program will exit.
Why so?
Anything wrong with package etc?
Thanks!
You need to do:
$ java -cp . edu.testjava.simple.JarTest
You need to specify the name of the class with the full package name (in this case edu.testjava.simple). You don't need .class or .java on the end.
You can also see the answers to How to execute a java .class from the command line.
Yes, it's because of the package. Java enforces the project structure to be the same as the package structure. That means, that the class in the edu.testjava.simple
package must be located in the edu/testjava/simple/
directory.
You may either:
- Remove package declaration (this, however, is only acceptable in such "hello world" cases)
- Compile the file using
javac -d . JarTest.java
(this will put the .class file in the appropriate directory) and launch it viajava edu.testjava.simple.JarTest
精彩评论