简体   繁体   English

线程“main”中的异常 java.lang.NoClassDefFoundError: org/jsoup/Jsoup

[英]Exception in thread "main" java.lang.NoClassDefFoundError: org/jsoup/Jsoup

I copied a simple web crawler from the inte.net and then started to run the application in a test class. Every time i try to run the application I get "Exception in thread "main" java.lang.NoClassDefFoundError: org/jsoup/Jsoup" error.我从 inte.net 复制了一个简单的 web 爬虫,然后开始在测试 class 中运行该应用程序。每次我尝试运行该应用程序时,我都会收到“线程“主”中的异常”java.lang.NoClassDefFoundError:org/jsoup/ Jsoup”错误。 I first imported the jsoup jar as a externaljar in a Libary, because I needed it for the http stuff.我首先将 jsoup jar 作为库中的外部 jar 导入,因为我需要它用于 http 的东西。

Error messages:错误信息:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jsoup/Jsoup
    at com.copiedcrawler.SpiderLeg.crawl(SpiderLeg.java:35)
    at com.copiedcrawler.Spider.search(Spider.java:40)
    at com.copiedcrawler.SpiderTest.main(SpiderTest.java:9)
Caused by: java.lang.ClassNotFoundException: org.jsoup.Jsoup
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 3 more

Spider Class蜘蛛 Class

package com.copiedcrawler;


import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

public class Spider
{
  private static final int MAX_PAGES_TO_SEARCH = 10;
  private Set<String> pagesVisited = new HashSet<String>();
  private List<String> pagesToVisit = new LinkedList<String>();

  public void search(String url, String searchWord)
  {
      while(this.pagesVisited.size() < MAX_PAGES_TO_SEARCH)
      {
          String currentUrl;
          SpiderLeg leg = new SpiderLeg();
          if(this.pagesToVisit.isEmpty())
          {
              currentUrl = url;
              this.pagesVisited.add(url);
          }
          else
          {
              currentUrl = this.nextUrl();
          }
          leg.crawl(currentUrl); // Lots of stuff happening here. Look at the crawl method in
                                 // SpiderLeg
          boolean success = leg.searchForWord(searchWord);
          if(success)
          {
              System.out.println(String.format("**Success** Word %s found at %s", searchWord, currentUrl));
              break;
          }
          this.pagesToVisit.addAll(leg.getLinks());
      }
      System.out.println("\n**Done** Visited " + this.pagesVisited.size() + " web page(s)");
  }


  /**
   * Returns the next URL to visit (in the order that they were found). We also do a check to make
   * sure this method doesn't return a URL that has already been visited.
   * 
   * @return
   */
  private String nextUrl()
  {
      String nextUrl;
      do
      {
          nextUrl = this.pagesToVisit.remove(0);
      } while(this.pagesVisited.contains(nextUrl));
      this.pagesVisited.add(nextUrl);
      return nextUrl;
  }
}

SpiderLeg class蜘蛛腿 class

package com.copiedcrawler;


import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class SpiderLeg
{
    // We'll use a fake USER_AGENT so the web server thinks the robot is a normal web browser.
    private static final String USER_AGENT =
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1";
    private List<String> links = new LinkedList<String>();
    private Document htmlDocument;


    /**
     * This performs all the work. It makes an HTTP request, checks the response, and then gathers
     * up all the links on the page. Perform a searchForWord after the successful crawl
     * 
     * @param url
     *            - The URL to visit
     * @return whether or not the crawl was successful
     */
    public boolean crawl(String url)
    {
        try
        {
            Connection connection = Jsoup.connect(url).userAgent(USER_AGENT);
            Document htmlDocument = connection.get();
            this.htmlDocument = htmlDocument;
            if(connection.response().statusCode() == 200) // 200 is the HTTP OK status code
                                                          // indicating that everything is great.
            {
                System.out.println("\n**Visiting** Received web page at " + url);
            }
            if(!connection.response().contentType().contains("text/html"))
            {
                System.out.println("**Failure** Retrieved something other than HTML");
                return false;
            }
            Elements linksOnPage = htmlDocument.select("a[href]");
            System.out.println("Found (" + linksOnPage.size() + ") links");
            for(Element link : linksOnPage)
            {
                this.links.add(link.absUrl("href"));
            }
            return true;
        }
        catch(IOException ioe)
        {
            // We were not successful in our HTTP request
            return false;
        }
    }


    /**
     * Performs a search on the body of on the HTML document that is retrieved. This method should
     * only be called after a successful crawl.
     * 
     * @param searchWord
     *            - The word or string to look for
     * @return whether or not the word was found
     */
    public boolean searchForWord(String searchWord)
    {
        // Defensive coding. This method should only be used after a successful crawl.
        if(this.htmlDocument == null)
        {
            System.out.println("ERROR! Call crawl() before performing analysis on the document");
            return false;
        }
        System.out.println("Searching for the word " + searchWord + "...");
        String bodyText = this.htmlDocument.body().text();
        return bodyText.toLowerCase().contains(searchWord.toLowerCase());
    }


    public List<String> getLinks()
    {
        return this.links;
    }

}

SpiderTest class蜘蛛测试 class

package com.copiedcrawler; package com.copiedcrawler;

public class SpiderTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Spider s1 = new Spider();
        s1.search("https://www.w3schools.com/html/", "html");
    }

}

Based on stacktrace you are running java program from command line and you forgot to add jsoup into class path.基于堆栈跟踪,您正在从命令行运行 java 程序,但忘记将 jsoup 添加到类路径中。 Try running尝试跑步

java -cp classes:libs/jsoup.jar com.copiedcrawler.SpiderTest java -cp 类:libs/jsoup.jar com.copiedcrawler.SpiderTest

Where classes is your program compiled and libs is a folder with libraries.其中 classes 是您编译的程序,而 libs 是一个包含库的文件夹。

You might have added the Jsoup Jar File into the Modulepath.您可能已将 Jsoup Jar 文件添加到模块路径中。

You need to add the JAR file to classpath.您需要将 JAR 文件添加到类路径中。

Follow the below steps:请按照以下步骤操作:

  1. Remove the Jsoup JAR from the libraries.从库中删除 Jsoup JAR。
  2. Project->Build Path->Configure Build Path->Libraries->ClassPath->Add External JARs. Project->Build Path->Configure Build Path->Libraries->ClassPath->Add External JARs。
  3. Apply and Close.应用并关闭。
  4. Re-run the project.重新运行该项目。

Now, It should work.现在,它应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 线程“ main”中的异常java.lang.NoClassDefFoundError:org / jsoup / nodes / Element - Exception in thread “main” java.lang.NoClassDefFoundError: org/jsoup/nodes/Element java.lang.NoClassDefFoundError:org.jsoup.Jsoup - java.lang.NoClassDefFoundError: org.jsoup.Jsoup Android java.lang.NoClassDefFoundError:org.jsoup.Jsoup - Android java.lang.NoClassDefFoundError: org.jsoup.Jsoup 线程“main”中的异常 java.lang.NoClassDefFoundError: org/hamcrest/Matchers - Exception in thread "main" java.lang.NoClassDefFoundError: org/hamcrest/Matchers “线程”main“中的异常 java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing” - “Exception in thread ”main“ java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing” 线程“main”中的异常java.lang.NoClassDefFoundError:org / reactivestreams / Publisher? - Exception in thread “main” java.lang.NoClassDefFoundError: org/reactivestreams/Publisher? 线程“ main”中的异常java.lang.NoClassDefFoundError:org / mockito / Mockito - Exception in thread “main” java.lang.NoClassDefFoundError: org/mockito/Mockito 线程“main”中的异常java.lang.NoClassDefFoundError:org / json / JSONObject - Exception in thread “main” java.lang.NoClassDefFoundError: org/json/JSONObject 线程“ main”中的异常java.lang.NoClassDefFoundError:org / javatuples / Unit - Exception in thread “main” java.lang.NoClassDefFoundError: org/javatuples/Unit 轴Java Web服务jsoup java.lang.NoClassDefFoundError:org / jsoup / nodes / Document - axis java web service jsoup java.lang.NoClassDefFoundError: org/jsoup/nodes/Document
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM