Запуск Java-программы из командной строки Linux
Я не очень разбираюсь в java, и это сводит меня с ума. Я написал программу java FileManagement
, и мне нужно запустить ее из командной строки.
Я могу скомпилировать его из командной строки с помощью javac FileManagement/*.java
, который создаст все классы в этой папке, но когда я попробую java FileManagement.Main
, он скажет:
Исключение в потоке "main" java.lang.NoClassDefFoundError: FileManagement/Main
Дело в том, что я пробовал эту же процедуру на удаленном компьютере, и она работает нормально. Он не работает на моем.
Ответы
Ответ 1
Если ваш класс Main
находится в пакете с именем FileManagement
, попробуйте:
java -cp . FileManagement.Main
в родительской папке папки FileManagement
.
Если ваш класс Main
отсутствует в пакете (пакет по умолчанию), то cd в папку FileManagement
и попробуйте:
java -cp . Main
Подробнее о CLASSPATH и о том, как JRE найти классы:
Ответ 2
Ребята понимают его синтаксис.
-
Если файл класса присутствует в Current Dir.
java -cp. имя_файла
-
Если файл класса присутствует в Dir. Перейдите в Parent Dir и введите ниже cmd.
java -cp. dir1.dir2.dir3.fileName
-
Если есть зависимость от внешних банок, тогда
java -cp.:./jarName1:./jarName2 имя_файла
Надеюсь, что это поможет.
Ответ 3
Каково имя пакета вашего класса? Если имя пакета отсутствует, то, скорее всего, это решение:
java -cp FileManagement Main
Ответ 4
(Это ответ KISS.)
Скажем, у вас есть несколько файлов .java в текущем каталоге:
$ ls -1 *.java
javaFileName1.java
javaFileName2.java
Скажем, каждый из них имеет метод main()
(поэтому они являются программами, а не lib), а затем компилировать их:
javac *.java -d .
Это сгенерирует столько подпапок, сколько "пакетов", с которыми связаны файлы .java. В моем случае все java файлы, где внутри под одним и тем же именем пакета packageName
, поэтому была создана только одна папка с этим именем, поэтому для выполнения каждого из них:
java -cp . packageName.javaFileName1
java -cp . packageName.javaFileName2