Оповещение новичка 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 используют / в качестве разделителей, даже для виджетов, путь к классу должен указывать на корень иерархии вашего пакета, а класс для запуска указан в нотации пакета относительно пути к классу.