【问题标题】:HttpClient NoClassDefFoundErrorHttpClient NoClassDefFoundError
【发布时间】:2010-07-12 18:41:54
【问题描述】:

我正在尝试从 HttpClient 4.0.1 运行示例应用程序。它是示例部分中的文件 ClientMultiThreadedExecution.java。我将这些文件放在类路径中:apache-mime4j-0.6.jar;commons-codec-1.3.jar;commons-logging-1.1.1.jar;httpclient-4.0.1.jar;httpcore-4.0.1.jar;httpmime-4.0.1.jar 文件编译正确。在运行时我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

我是否缺少参考资料?这似乎是一个类路径错误,但我不知道要包含哪个 jar 文件?提前感谢您的帮助。

【问题讨论】:

    标签: java classpath httpclient classnotfound


    【解决方案1】:

    此异常表明 runtime 类路径中缺少提到的类。

    有几种方法可以指定运行时类路径,具体取决于您执行程序的方式。由于一个体面的 IDE 可以透明地从您手中获取这一切,我敢打赌您是在命令提示符下运行它。

    如果您通过java.exe -jar 或双击文件将其作为JAR 文件运行,那么您需要在JAR 的MANIFEST.MF 文件的Class-Path 条目中指定类路径。请注意,每当您执行 JAR 时,%CLASSPATH% 环境变量以及 -cp-classpath 参数都会被忽略

    如果您将它作为java.exe 的“普通”Java 应用程序运行,那么您需要在-cp-classpath 参数中指定它。请注意,无论何时使用此参数,%CLASSPATH% 环境变量都会忽略

    无论哪种方式,类路径都应该存在一个(半)冒号分隔的 JAR 文件路径字符串(绝对路径或相对于当前工作目录的路径)。例如

    java -cp .;/path/to/file1.jar;/path/to/file2.jar com.example.MyClass

    (如果您使用的是 Unix/Linux,请使用冒号而不是分号作为路径分隔符)

    【讨论】:

      【解决方案2】:

      该类在 httpclient-4.0.1.jar 中(我刚刚下载了它以确保它)所以我怀疑你没有正确地将它放在类路径中。

      你是如何编译和运行你的代码的?

      【讨论】:

      • 使用文本板。它与 JAR 文件位于同一目录中,我在配置 $File -cp .;apache-mime4j-0.6.jar;commons-codec-1.3.jar;commons-logging-1.1.1.jar;httpclient- 中有这个4.0.1.jar;httpcore-4.0.1.jar;httpmime-4.0.1.jar 编译正常,但不运行。
      【解决方案3】:

      在 cloudera-quickstart-vm-5.8.0 中运行 Eclipse Luna 2 (4.4.2) 我必须添加以下内容

      • apache-httpcomponents-httpcore.jar
      • httpclient-4.5.3.jar
      • httpclient-cache-4.5.3.jar

      ...然后它没有错误地工作

      【讨论】:

        【解决方案4】:

        当我遇到这个问题时,事实证明,当我将 Fluent API 添加为 Maven 依赖项时,它导入的 HTTPClient API 版本与我已经使用的版本不同。两个版本的 API 都打包在生成的 JAR 的 lib 文件夹中。版本冲突是导致此错误的原因。

        向您的类路径添加条目将解决问题,因为您只是手动指定要使用的版本。但是,为了解决根本问题,我只需要在重建之前删除我的目标文件夹(或运行 maven clean)。这删除了所有“缓存”的库 JAR,并且在下一次构建时,只重新下载了正确的 JAR。

        希望对某人有所帮助!

        【讨论】:

          【解决方案5】:

          当您遇到连接、发送等问题时,我只想对 Exception 进行小幅改进......并且您想知道 WAY。

          httpclient-4.5.13.jar httpcore-4.5.13.jar +++ for Exception +++ javax.activation-api-1.2.0.jar javax.annotation-api-1.3.2.jar javax.xml.soap-api-1.4.0.jar jaxb-api-2.3.1.jar

          public static boolean sendEmailViaExchange( String strUserName, String strPassword, String strDomain, String strURI, String strRecipient, String strSubject, String strMessageBody )  // BYTE attachment
          {                   
              try  // e-mail
              {                   
                  ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
                  service.setCredentials(new WebCredentials(strUserName, strPassword, strDomain));
                  service.setUrl( new URI( strURI ) );    
          
                  EmailMessage msg= new EmailMessage(service);                
                  msg.setSubject( strSubject );
                  msg.setBody(MessageBody.getMessageBodyFromText( strMessageBody ));
                  msg.getToRecipients().add( strRecipient );
                  msg.send();
              }
              catch (Exception e)     // try  // e-mail   
              {
                  LOGGER.log(Level.SEVERE, "ERROR: " + e.getMessage());
                          
                  return false;
              }   // try  // e-mail  catch (Exception e)
                      
              return true;
          }   //  public static boolean sendEmailViaExchange( String strUserName, String strPassword, String strDomain, String strURI, String strRecipient, String strSubject, String strMessageBody )  // BYTE attachment
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-12-19
            • 2012-03-25
            • 2019-12-05
            • 2016-07-04
            • 2013-10-19
            • 1970-01-01
            • 2016-02-10
            相关资源
            最近更新 更多