Руководство по началу работы с Jersey 2.0, mainClass не найден

Здравствуйте, я пытаюсь следовать руководству по началу работы для Джерси 2.0.

Я сделал шаги 1.1 и 1.2 как есть. Нет проблем.

На шаге 1.3 у меня возникла проблема, потому что maven не смог найти аннотацию javax 1.2, но я решил ее, следуя совету другого пользователя Stackoverflow и добавил репозиторий в мой pom.

Такmvn clean test проходит без проблем, НО при попытке запуска mvn clean exec:java возвращается

[WARNING] java.lang.ClassNotFoundException: com.example.Main
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:285)
at java.lang.Thread.run(Thread.java:722)

pom.xml создается следующей командой:

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.0

где единственное добавление, которое я сделал, это следующее:

<repositories>
  <repository>
    <id>java.net.repo</id>
    <url>https://maven.java.net/content/groups/promoted/</url>
    <layout>default</layout>
  </repository>
</repositories>

Если это интересно, это вывод mvn -version

 Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200)
 Maven home: /usr/share/maven
 Java version: 1.7.0_21, vendor: Oracle Corporation
 Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/jre
 Default locale: el_GR, platform encoding: UTF-8
 OS name: "mac os x", version: "10.8.3", arch: "x86_64", family: "mac"

person user2465039    schedule 07.06.2013    source источник
comment
У вас есть класс с именем Main?   -  person Daniel Kaplan    schedule 08.06.2013
comment
да, созданный по умолчанию maven в src/main/java/com/example. На самом деле есть два автоматически созданных класса: Main.java и MyResource.java (описаны в руководстве пользователя).   -  person user2465039    schedule 08.06.2013


Ответы (1)


arrow_upward
21
arrow_downward

Я могу воспроизвести вашу ошибку. Это не имеет ничего общего с Джерси; это ошибка, которую вы делаете с Maven. mvn clean exec:java говорит: "удалите все файлы .class, а затем попробуйте запустить файл Main .class". Поскольку вы удалили его, Maven не может его найти. Вот решение:

mvn clean compile exec:java

Это должно решить проблему в вашем вопросе. Это говорит: «Удалите все файлы .class, перекомпилируйте их из исходного кода, а затем попробуйте запустить файл Main .class»

Чтобы обойти следующую ошибку, которую вы увидите, удалите строку <scope>test</scope> из клиентской зависимости в pom.xml:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <scope>test</scope>
</dependency>

To:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
</dependency>
person Daniel Kaplan    schedule 07.06.2013
comment
Спасибо. Я не знаю о maven, но я предположил, что exec: java будет зависеть от компиляции. В любом случае, однако, даже с удалением области из pom.xml я теперь получаю кучу java.lang.NoClassDefFoundError: org/glassfish/jersey/client/ClientConfig. Я думаю, что руководство по началу работы с джерси не для начинающих :-) - person user2465039; 08.06.2013
comment
@ user2465039 прочитайте конец моего ответа. Там показано, как это исправить. - person Daniel Kaplan; 08.06.2013
comment
Спасибо! Я удалил не тот прицел :-) Кто-то должен обновить руководство. Я бы проголосовал за вас, но мне пока не хватает баллов :-) - person user2465039; 08.06.2013
comment
Отличный ответ, работает как шарм! Я удивлен, что в официальной документации Джерси так много ошибок. - person Mingyu; 28.07.2013