Как я выполняю Java .class файлы?

Я скомпилировал программу 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.

62
задан 22 April 2011 в 19:56

1 ответ

Для выполнения файл класса 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 не будет работать, если скомпилированный файл был запутан.

32
ответ дан 31 October 2019 в 13:58

Другие вопросы по тегам:

Похожие вопросы: