Я скомпилировал программу HelloWorld, и я использую командную строку для выполнения ее. .class файл называют HelloWorld2.class
Файл расположен в C:\Users\Matt\workspace\HelloWorld2\bin Here, что я получаю, когда я перехожу к командной строке и ввожу "Java HelloWorld2":
C:\Users\Matt>Java HelloWorld2
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld2
Caused by: java.lang.ClassNotFoundException: HelloWorld2
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)
Could not find the main class: HelloWorld2. Program will exit.
Я ожидал видеть распечатанный HelloWorld. Что я делаю неправильно? Мне установили JDK.
Для выполнения файл класса Java из командной строки синтаксис:
java -classpath /path/to/jars <packageName>.<MainClassName>
, где packageName (обычно запускается или с com
или с org
) является именем папки, где Ваш файл класса присутствует.
, Например, если Вашим основным именем класса является Приложение и , имя пакета Java из Вашего приложения com.foo.app
, то Ваш файл класса должен быть в com/foo/app
папка (отдельная папка для каждой точки), таким образом, Вы запускаете свое приложение как:
$ java com.foo.app.App
<глоток> Примечание: $
указывает на приглашение оболочки, проигнорируйте его при вводе глотка>
, Если класс не имеет никакого package
имя определенный, просто выполненный как: java App
.
, Если у Вас есть какие-либо другие зависимости от банки, удостоверьтесь, что Вы указали Ваш путь к классу параметр или с [1 112] / -classpath
или использование CLASSPATH
переменная, которая указывает на папку с Вашим банка / война / ухо / zip / файлы класса . Таким образом на Linux можно снабдить префиксом команду: CLASSPATH=/path/to/jars
, в Windows необходимо добавить папку в системную переменную. Если не набор, пользовательский путь к классу состоит из текущего каталога (.
).
, Учитывая мы создали демонстрационный проект с помощью [1 125] Знаток как:
$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
и мы скомпилировали наш проект [1 117] в нашем my-app/
dir, он генерирует наш файл класса, находится в [1 119].
Для выполнения его мы можем или указать путь к классу через [1 120] или идущий в него непосредственно, проверить примеры ниже:
$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!
Для проверения дважды класса и имени пакета можно использовать инструмент дизассемблера файла класса Java, например:
$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
public com.foo.app.App();
public static void main(java.lang.String[]);
}
<глоток> Примечание: javap
не будет работать, если скомпилированный файл был запутан.