Я скомпилировал программу 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.
java
compilation
Skizz
источник
источник
Ответы:
Вам нужно установить путь к классам, чтобы найти свой скомпилированный класс:
java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2
источник
Чтобы запустить файл класса Java из командной строки, используйте следующий синтаксис:
где packageName (обычно начинается с
com
илиorg
) - это имя папки, в которой находится ваш файл класса.Например, если ваше основное имя класса - приложение, а имя пакета Java вашего приложения -
com.foo.app
то ваш файл класса должен находиться вcom/foo/app
папке (отдельная папка для каждой точки), поэтому вы запускаете свое приложение как:Примечание:
$
указывает приглашение оболочки, игнорируйте его при вводеЕсли ваш класс не имеет
package
имени определенные, просто работать как:java App
.Если у вас есть какие-либо другие зависимости jar, убедитесь, что вы указали свой параметр classpath с помощью
-cp
/-classpath
или с помощьюCLASSPATH
переменной, которая указывает на папку с вашими файлами jar / war / ear / zip / class . Итак, в Linux вы можете префикс команды:,CLASSPATH=/path/to/jars
в Windows вам нужно добавить папку в системную переменную. Если не задан, путь к пользовательскому классу состоит из текущего каталога (.
).Практический пример
Учитывая, что мы создали образец проекта, используя Maven как:
$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
и мы скомпилировали наш проект
mvn compile
в нашемmy-app/
каталоге, он сгенерирует наш файл классаtarget/classes/com/foo/app/App.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!
Чтобы дважды проверить свой класс и имя пакета, вы можете использовать инструмент дизассемблера файлов классов 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
не будет работать, если скомпилированный файл был запутан.источник
Это может означать множество вещей, но наиболее распространенным является то, что класс, содержащийся в файле, не имеет того же имени, что и сам файл. Итак, проверьте, называется ли ваш класс также HelloWorld2.
источник
C:/blah/blah/foldercontainJava
javac javafile.java
источник
Вы должны указать java в нижнем регистре и добавить .class!
источник