2016-04-21 2 views
0

У меня есть пакет со многими файлами и каталогами (Californium, реализация протокола CoAP). Это проект Maven. Я перешел в каталог файла pom.xml и запустил mvn package в терминале. Все прошло хорошо. Но, перейдя к одному из примеров (Helloworldserver.class) и попытавшись запустить его с java HelloWorldServer, я получаю:Какой путь писать в java -classpath?

Error: Could not find or load main class HelloWorldServer.

Я смотрю на путь класса, набрав echo $CLASSPATH, и ничего не получаю. Так что я пытаюсь установить: путь к классам

java -classpath org.eclipse.californium.examples 

который генерирует описание всех возможных вариантов, доступных для команды Java, и не устанавливает путь к классам.

Я выбрал в путь к классам выше команды, так как в HelloWorldServer.java, есть первая строка:

package org.eclipse.californium.examples; 

Я подозреваю, что это не так, судя по выходу моей команды. Как правильно указывать путь? На что я хочу обратить внимание?

+0

'mvn package' должен был создать файл jar в' target'. Это может включать или не включать все зависимости и/или быть исполняемыми. Может быть, проект включает в себя некоторые сценарии оболочки для запуска? Или, по крайней мере, README? – Thilo

+0

А, да. Существует файл jar. Но при запуске я получаю ту же ошибку, но вместо имени файла jar. – Sahand

ответ

0

Когда вы создали код с помощью Maven, он создаст «целевой» каталог и внутри этого дерева каталогов «классов», которое содержит файлы классов, созданные компилятором.

Найдите этот каталог "target/classes" или что бы он ни называл. (Это называется «целевой/классы» в стандартной структуре Maven файл, но файл POM может указать иначе.)

Теперь запустите приложение, как это:

$ java -classpath target/classes:<dependency-1>:<dependency-2>:... \ 
     org.eclipse.californium.examples.HelloWorldServer 

где <dependency-1> и <dependency-2> и т.д. являются именами путей для файлов JAR зависимостей ... как загружено в ваш местный .m2 репо Maven.


Общая картина, что параметр -classpath является разделенными двоеточиями списка имен каталогов, баночки/имена файлов почтовых индекса или банки/шаблоны файлов почтового индекса. Если вы запускаете против классов, которые не были упакованы в JAR или ZIP-файл, вам нужно указать корень дерева классов. Например, если полное имя для вашего HelloWorldServer класса

org.eclipse.californium.examples.HelloWorldServer 

то дерево каталогов цель будет выглядеть следующим образом:

... 
    target: 
    classes: 
     org: 
     eclipse: 
      californium: 
      examples: 
       HelloWorldServer.class 

«целевой/классы» правильный корневой каталог. Команда java попытается перейти к файлу HelloWorldServer.class на основе именования пакетов.

не поддавайтесь искушению сделать это:

$ java -classpath target/classes/org/eclipse/californium/examples:... \ 
    HelloWorldServer.class 

Он не будет работать.


1 - или точка с запятой в Windows.

Смежные вопросы