开发者社区 问答 正文

Java-SDK的常见问题(二)

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/protocol/HttpContext
  2.         at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
  3.         at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
  4.         at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76)
  5. Caused by: java.lang.ClassNotFoundException: org.apache.http.protocol.HttpContext
  6.         at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  7.         at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  8.         at java.security.AccessController.doPrivileged(Native Method)
  9.         at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  10.         at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  11.         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  12.         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  13.         ... 3 more

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder
  2.         at com.aliyun.oss.internal.ResponseParsers.getXmlRootElement(ResponseParsers.java:645)
  3.         at … …
  4.         at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:471)
  5.         at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:465)
  6.         at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:82)
  7. Caused by: java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder
  8.         at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  9.         at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  10.         at java.security.AccessController.doPrivileged(Native Method)
  11.         at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  12.         at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  13.         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  14.         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  15.         ... 11 more

等类似错误,说明您的工程缺少OSS Java SDK编译或运行必须的包。OSS Java SDK依赖下列包:
  • aliyun-sdk-oss-2.2.1.jar
  • hamcrest-core-1.1.jar
  • jdom-1.1.jar
  • commons-codec-1.9.jar
  • httpclient-4.4.1.jar
  • commons-logging-1.2.jar
  • httpcore-4.4.1.jar
  • log4j-1.2.15.jar

其中,log4j-1.2.15.jar是可选的,需要日志功能的时加入该包。其它包都是必不可少的。
解决办法:您的工程中在加入OSS Java SDK依赖的包,加入方法如下:
  • 如果您的工程是Eclipse。请参考Java-SDK使用手册中的安装方式二:在Eclipse项目中导入工程依赖的包。
  • 如果您的工程是Ant。请把OSS Java SDK依赖的包,放入工程lib目录。
  • 如果您直接使用javac/java,请使用-classpath/-cp指定OSS Java SDK依赖的包路径,或把OSS Java SDK依赖的包放入classpath路经下。






展开
收起
青衫无名 2017-10-18 11:21:20 1914 分享 版权
阿里云 AI 助理回答

您遇到的问题是Java程序在运行时无法找到必要的类定义,这通常是因为缺少相应的依赖库(jar包)。根据您提供的错误信息,问题出在Apache HTTP客户端和JDOM这两个库上。OSS Java SDK需要这些库来正常工作。

解决这个问题的方法是确保所有必需的jar包都已添加到您的项目类路径中。以下是针对不同开发环境的具体操作步骤:

对于Eclipse用户

  1. 手动添加jar包

    • 下载上述提到的所有必要jar包。
    • 在Eclipse中,右键点击您的项目 -> 选择"Build Path" -> 点击"Configure Build Path"。
    • 转到"Libraries"标签页 -> 点击"Add Jars"或"Add External Jars"。
    • 浏览并选择您下载的jar文件,然后确认添加。
  2. 使用Maven或Gradle管理依赖: 如果您的项目使用了Maven或Gradle作为构建工具,可以在pom.xmlbuild.gradle文件中直接声明对阿里云OSS SDK及其依赖的依赖关系,构建工具会自动下载所需的jar包。

对于Ant用户

  • 将所有必要的jar包复制到项目的lib目录下。
  • build.xml文件中,确保classpath元素包含了lib目录下的所有jar包。

直接使用javac/java命令行编译和运行

  • 使用-classpath或-cp选项指定所有jar包的路径。例如:
    javac -classpath /path/to/aliyun-sdk-oss-2.2.1.jar:/path/to/httpclient-4.4.1.jar:/path/to/commons-codec-1.9.jar YourMainClass.java
    java -classpath .:/path/to/aliyun-sdk-oss-2.2.1.jar:/path/to/httpclient-4.4.1.jar:/path/to/commons-codec-1.9.jar YourMainClass
    

    这里.:/path/to/...表示当前目录加上所有依赖的jar包路径。

请确保按照上述方法之一正确地将所有必要的库添加到您的项目中,这样应该可以解决您遇到的NoClassDefFoundError问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答