Как запустить Java .class файлы?
Я скомпилировал программу HelloWorld, и я использую командную строку для ее запуска. Файл .class называется HelloWorld2.class
Файл находится в папке C: \ Users \ Matt \ workspace \ HelloWorld2 \ bin Вот что я получаю, когда я иду в командной строке, и набираю “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.
- Лучший способ ограничить пользователя вводом времени в JTextField
- Получение значения XML-узла в Java DOM
- JPA, Как использовать один и тот же class (сущность) для сопоставления разных таблиц?
- Явный целочисленный массив байтов
- Сравнивая два java.util.Dates, чтобы узнать, находятся ли они в тот же день
- Как перебрать атрибуты classа в Java?
- java "void" и "non void" конструктор
- Как читать один символ с консоли в Java (как пользователь вводит его)?
- Как я могу скомпилировать и развернуть class java во время выполнения?
- Нарушение рекурсии в java
- JFrame в полноэкранном режиме Java
- Java / JAXB: атрибуты Unmarshall XML для определенных атрибутов объектов Java
- Какую аннотацию следует использовать: @IdClass или @EmbeddedId
Вам нужно установить путь к classу для поиска вашего скомпилированного classа:
java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2
Чтобы запустить файл classа Java из командной строки, синтаксис:
java -classpath /path/to/jars .
где packageName (обычно начинается с com
или org
) – это имя папки, в которой присутствует ваш файл classа.
Например, если ваше основное имя classа – это имя приложения и Java-пакета вашего приложения com.foo.app
, то ваш файл classа должен находиться в папке com/foo/app
(отдельная папка для каждой точки), поэтому вы запускаете приложение в виде:
$ java com.foo.app.App
Примечание: $
указывает приглашение оболочки, игнорирует его при наборе текста
Если ваш class не имеет определенного имени package
, просто запустите его как: java App
.
Если у вас есть какие-либо другие зависимости jar, убедитесь, что вы указали свой параметр classpath с помощью -classpath
/ -classpath
или с помощью переменной CLASSPATH
которая указывает на папку с файлами jar / war / ear / zip / class . Итак, на Linux вы можете префикс команды: CLASSPATH=/path/to/jars
, в Windows вам нужно добавить папку в системную переменную. Если не задано, путь к пользовательскому classу состоит из текущего каталога ( .
).
Практический пример
Учитывая, что мы создали образец проекта с использованием Maven как:
$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
и мы скомпилировали наш проект с помощью mvn compile
в нашем my-app/
dir, он будет генерировать наш файл classа в target/classes/com/foo/app/App.class
.
Чтобы запустить его, мы можем либо указать путь classа через -cp
либо перейти к нему напрямую, проверьте примеры ниже:
$ 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!
Чтобы дважды проверить свой class и имя пакета, вы можете использовать инструмент дизассемблера файла classа 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
не будет работать, если скомпилированный файл был запутан.
Это может означать много чего, но наиболее распространенным является то, что class, содержащийся в файле, не имеет того же имени, что и сам файл. Итак, проверьте, называется ли ваш class HelloWorld2.