Оповещение новичка JAVA: Попытка запустить класс Java и получение ClassNotFoundException

Ява новичок. Я пытаюсь запустить основной класс Java из строки CMD и получить обратно ClassNotFoundException:

java -cp class c:\development\eclipse\workspace\Library-Manager-Server\bin\demo\rmi\librarymanager\server\LibraryManagerServer 

-Djava.security.policy="C:\Development\Eclipse\Workspace\Library-Manager-Server\security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin/ file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin/"

Класс определенно есть в корзине (куда его затмевает eclipse), но по какой-то причине (возможно, тривиальной) его невозможно найти, когда я запускаю строку cmd выше.

Любая помощь приветствуется!

РЕДАКТИРОВАТЬ # 1: как некоторые из вас, возможно, догадались, имя класса demo.rmi.librarymanager.server.LibraryManagerServer

РЕДАКТИРОВАТЬ # 2: ОК - благодаря предложениям людей, я думаю, что на этот раз я правильно понял синтаксис, но я все еще получаю ClassNotFoundException но в другом классе в общем пакете:

demo.rmi.librarymanager.common.Library

Вот новая строка cmd:

java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin demo.rmi.librarymanager.server.LibraryManagerServer 

-Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin"

Должен ли я добавить c:/development/eclipse/workspace/Library-Manager-Common/bin путь (где demo.rmi.librarymanager.common.Library живет) вместе с c:/development/eclipse/workspace/Library-Manager-Server/bin после -cp в качестве аргумента командной строки?

Спасибо всем за помощь и терпение - я работаю над приложением RMI, и все было хорошо, пока я не работал в Eclipse с использованием плагина RMI, но сейчас у меня немного трудные времена, так как я довольно новичок в Java (как Вы можете видеть из моего вопроса!).

РЕДАКТИРОВАТЬ # 3: Хорошо, я получил это работает:

java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin;c:/development/eclipse/workspace/Library-Manager-Common/bin 

demo.rmi.librarymanager.server.LibraryManagerServer 

-Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin"

Спасибо всем за душ смирения.

3 ответа

Решение

Командная строка Java:

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

where options include:
    -client       to select the "client" VM
    -server       to select the "server" VM
    -hotspot      is a synonym for the "client" VM  [deprecated]
                  The default VM is client.

    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A ; separated list of directories, JAR archives,
                  and ZIP archives to search for class files.

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

Если ваши файлы классов находятся в bin, команда может выглядеть так:

java -cp bin myClass

так что возможно

java -cp bin demo.rmi.librarymanager.server.LibraryManagerServer

если вы находитесь в каталоге вашего проекта Eclipse.

Обратите внимание, что Eclipse имеет настройки (которые вы можете переопределить) для того, где находятся классы. Я обнаружил, что разные версии Eclipse имеют разные по умолчанию. Итак, я видел bin, classes или (как я использую Maven) target/classes,

Это, вероятно, будет работать:

java -cp c:\development\eclipse\workspace\Library-Manager-Server\bin\ demo.rmi.librarymanager.server.LibraryManagerServer 

Это предполагает, что вы хотите запустить класс LibraryManagerServer в упаковке demo.rmi.librarymanager.server,

Обратите внимание, что если вы используете классы в пакетах (что желательно, за исключением короткого теста или учебного кода), вы должны

  • Используйте полное имя (включая пакет) класса, чтобы сообщить java.exe, какой класс запустить
  • Задайте в качестве classpath базовый каталог, в котором находится иерархия каталогов, соответствующая иерархии пакетов.

Из вашей командной строки я бы догадался:

java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin
-Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 
-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin/ file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin/"
demo.rmi.librarymanager.server.LibraryManagerServer 

Пути Java используют / в качестве разделителей, даже для виджетов, путь к классу должен указывать на корень иерархии вашего пакета, а класс для запуска указан в нотации пакета относительно пути к классу.

Другие вопросы по тегам