【问题标题】:Jersey 2.0 "Getting Started" guide, mainClass not foundJersey 2.0“入门”指南,找不到 mainClass
【发布时间】:2013-06-07 21:41:11
【问题描述】:

您好,我正在尝试关注 Jersey 2.0 的 Getting Started guide

我按原样执行了步骤 1.1 和 1.2。没问题。

对于步骤 1.3,我遇到了一个问题,因为 maven 找不到 javax-annotation 1.2,但我按照of another Stackoverflow user 的建议解决了它,并在我的 pom.xml 中添加了一个存储库。

所以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" 

【问题讨论】:

  • 你有一个名为Main的类吗?
  • 是的,maven默认在src/main/java/com/example下创建。事实上,自动创建了两个类 Main.java 和 MyResource.java(在用户指南中描述)

标签: java maven jersey jersey-2.0


【解决方案1】:

我能够重现您的错误。这与泽西岛无关;这是您使用 Maven 犯的错误。 mvn clean exec:java 说:“删除所有 .class 文件,然后尝试运行 Main .class 文件”。既然你删了,Maven就找不到了。这是一个解决方案:

mvn clean compile exec:java

这应该可以解决您的问题。这表示“删除所有 .class 文件,从源代码重新编译它们,然后尝试运行 Main .class 文件”

要解决您将看到的下一个错误,请从 pom.xml 中的客户端依赖项中删除 &lt;scope&gt;test&lt;/scope&gt; 行:

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

收件人:

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

【讨论】:

  • 谢谢。我不了解 maven,但我认为 exec:java 将依赖于编译。然而,无论如何,即使从 pom.xml 中删除范围,我现在也会得到一堆 java.lang.NoClassDefFoundError: org/glassfish/jersey/client/ClientConfig。我认为球衣的入门指南不适合初学者:-)
  • @user2465039 阅读我答案的底部。它显示了如何解决这个问题。
  • 谢谢!我删除了错误的范围 :-) 不过有人需要更新指南。我会投票给你,但我在这里还没有足够的积分:-)
  • 很好的答案,就像一个魅力!我很惊讶泽西官方文档有这么多错误。
猜你喜欢
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2010-11-10
  • 2011-05-06
  • 1970-01-01
相关资源
最近更新 更多