Запуск Java-программы из командной строки Linux - PullRequest
21 голосов
/ 11 сентября 2010

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

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

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

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

Ответы [ 4 ]

21 голосов
/ 11 сентября 2010

Если ваш класс Main находится в пакете с именем FileManagement, попробуйте:

java -cp . FileManagement.Main

в родительской папке FileManagement.

Если ваш класс Main не входит в пакет (пакет по умолчанию), то cd в папку FileManagement и попробуйте:

java -cp . Main

Подробнее о CLASSPATH и о том, как JRE находит классы:

6 голосов
/ 11 июля 2013

Ребята, давайте разберемся в синтаксисе этого.

  1. Если файл класса присутствует в Current Dir.

    java -cp.fileName

  2. Если файл класса присутствует в Dir.Перейдите в родительский каталог и введите ниже cmd.

    java -cp.dir1.dir2.dir3.fileName

  3. Если существует зависимость от внешних jar-файлов, тогда

    java -cp.: ./ jarName1:./jarName2 fileName

    Надеюсь, это поможет.

3 голосов
/ 21 июля 2016

(Это ответ поцелуя.)

Допустим, у вас есть несколько файлов .java в текущем каталоге:

$ ls -1 *.java
javaFileName1.java
javaFileName2.java

Допустим, у каждого из них есть метод main() (так что они программы, а не библиотеки), затем для их компиляции выполните:

javac *.java -d .

При этом будет создано столько подпапок, сколько «пакетов» связаны с файлами .java. В моем случае все java-файлы внутри одного и того же имени пакета packageName, поэтому с таким именем была сгенерирована только одна папка, поэтому для выполнения каждого из них:

java -cp . packageName.javaFileName1
java -cp . packageName.javaFileName2
1 голос
/ 11 сентября 2010

Какое название пакета вашего класса?Если имя пакета отсутствует, то, скорее всего, решение выглядит так:

java -cp FileManagement Main
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...