Подтвердить что ты не робот

Запуск Java-программы из командной строки Linux

Я не очень разбираюсь в java, и это сводит меня с ума. Я написал программу java FileManagement, и мне нужно запустить ее из командной строки.

Я могу скомпилировать его из командной строки с помощью javac FileManagement/*.java, который создаст все классы в этой папке, но когда я попробую java FileManagement.Main, он скажет:

Исключение в потоке "main" java.lang.NoClassDefFoundError: FileManagement/Main

Дело в том, что я пробовал эту же процедуру на удаленном компьютере, и она работает нормально. Он не работает на моем.

4b9b3361

Ответ 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