我有一个Java 64位Eclipse应用程序,其中Eclipse在Windows 7 Pro x64上运行。
我下载了Jersey软件包jaxrs-ri-2.7.zip,用于客户端RESTful API访问。
我添加了这些外部jar(项目|构建路径|配置构建路径... |库):
jaxrs-ri/api/javax.ws.rs-api-2.0.jar
jaxrs-ri/lib/jersey-client.jar
jaxrs-ri/lib/jersey-common.jar
以下是来源:
package prjTestJersey;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
public static void main(String[] args)
{
try
{
Client oClient = ClientBuilder.newClient();
oClient.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
当踩到第一行时,我收到以下错误:Clinet oClient ...:
Source not found.
为什么错误以及如何解决?为什么"来源未找到"而不是真正的错误。
注意:我尝试将3个jar文件复制到项目的lib文件夹中,但这没有任何好处。我正在使用Eclipse调试器,因此在调试视图中按F11,然后在线上执行F6。
更新:
我尝试创建一个全新的32位应用程序(WindowBuilder SWT应用程序窗口)并简单地更新main(...),同样的问题。这意味着问题与平台无关。
更新2:
尝试运行的已发布答案并不是一个坏主意。 :-)这给了另一条线索,我必须追查。这是转储。
Exception in thread "main" java.lang.NoClassDefFoundError: org/glassfish/hk2/utilities/binding/AbstractBinder
at org.glassfish.jersey.client.ClientConfig.<init>(ClientConfig.java:452)
at org.glassfish.jersey.client.JerseyClientBuilder.<init>(JerseyClientBuilder.java:94)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at javax.ws.rs.client.FactoryFinder.newInstance(FactoryFinder.java:116)
at javax.ws.rs.client.FactoryFinder.find(FactoryFinder.java:206)
at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:86)
at javax.ws.rs.client.ClientBuilder.newClient(ClientBuilder.java:114)
at AppMain.main(AppMain.java:20)
Caused by: java.lang.ClassNotFoundException: org.glassfish.hk2.utilities.binding.AbstractBinder
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 12 more
最终答案: (感谢帮助的答案。)
我缺少依赖项。需要的清单是:
swt_win32_x86.jar
api/javax.ws.rs-api-2.0.jar
ext/jersey-guava-2.7.jar
ext/hk2-api-2.2.0.jar
lib/jersey-common.jar
lib/jersey-client.jar
答案 0 :(得分:7)
您缺少包含org.glassfish.hk2.utilities.binding.AbstractBinder类的hk2 api jar
答案 1 :(得分:5)
我的猜测是&#34;未找到来源&#34;只是来自Eclipse的消息告诉你它无法调试到Client oClient = ClientBuilder.newClient();
,因为你没有Eclipse中附加的三个jar的源代码。如果你只是运行程序(没有调试)它可能会很好地工作。在这里阅读更多关于如何在Eclipse中向jar文件添加源代码的内容:Is there an easy way to attach source in Eclipse?。
如果它仍然无法正常工作,我建议您从已下载的软件包中添加所有罐子,以确保您不会错过某些依赖项。
答案 2 :(得分:4)
仅适用于gradle用户。
正确版本的javax.ws.rs-api
和jersey-client
将解决未找到的类问题。
compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.1-m01'
compile group: 'org.glassfish.jersey.core', name: 'jersey-client', version: '2.24.1'
答案 3 :(得分:0)
添加以下依赖项将解决此问题
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.2.Final</version>
</dependency>