【问题标题】:Could not find or load main class on simple Java Soup app [duplicate]无法在简单的 Java Soup 应用程序上找到或加载主类 [重复]
【发布时间】:2017-05-21 15:07:04
【问题描述】:

我编译了我找到的这个简单程序 here

package com.stackoverflow.q2835505;

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

public class Test {

public static void main(String[] args) throws Exception {
    String url = "https://stackoverflow.com/questions/2835505";
    Document document = Jsoup.connect(url).get();

    String question = document.select("#question .post-text").text();
    System.out.println("Question: " + question);

    Elements answerers = document.select("#answers .user-details a");
    for (Element answerer : answerers) {
        System.out.println("Answerer: " + answerer.text());
    }
}

}

在终端中使用此命令:

javac -cp ./jsoup-1.10.2.jar Test.java

但是当我尝试运行它时,我会这样做:

错误:无法找到或加载主类

我找不到解决方案,问题出在哪里?谢谢。

【问题讨论】:

  • @Pshemo 请考虑重新提出这个问题。除了主要的java classpath 错误之外,他还有一个javac 问题。我觉得我的逐步回答也可能使其他 Java 初学者受益。 (顺便说一句,我已经在我的回答中链接到上述问题)。谢谢大佬!
  • @OP but when i try to run it i take this 你没有展示你如何尝试运行它。您之前的命令显示了您如何尝试编译它。
  • @PauloMattos 您所说的“他有一个超出主要 java 类路径错误的 javac 问题”是什么意思? javac -cp ./jsoup-1.10.2.jar Test.java 应该创建正确的 .class 文件(至少 OP 没有提到任何编译问题)。 “无法找到或加载主类”是从 Test.class 类运行 main 方法的问题。为了使它成为可能,OP 需要在-cp 中指定包含它的包的位置。所有这一切都以一式两份的形式进行解释。无论问题是否已关闭,您的答案仍可能对其他人有所帮助,因此我认为没有理由不让它保持关闭状态。
  • @Pshemo 我也很惊讶...在 macOS 上(至少),运行javac,没有-d . 选项,将生成的Test.class 放在当前目录 (而不是在预期的com/stackoverflow/q2835505/Test.class 路径中)。这使得使用java 运行它变得很棘手,即使使用完全限定的类名也是如此。因此,这两个问题都是相关的......
  • 可能有帮助:stackoverflow.com/a/18740577

标签: java web-scraping jsoup classpath


【解决方案1】:

您可能会遇到不止一个问题...

Javac。可以肯定的是,像这样编译您的 Java 应用程序:

javac -cp ./jsoup-1.10.2.jar -d . Test.java

-d 选项确保编译后的类放在相应的package目录中:

com/stackoverflow/q2835505/Test.class

而不是在您当前的目录中。让我们check the man page 确定(-d 选项):

设置类文件的目标目录。该目录必须已经存在,因为javac 不会创建它。如果类是包的一部分,则javac 将类文件放在反映包名称的子目录中,并根据需要创建目录。

如果-d 选项未指定,则javac 将每个类文件放在与生成它的源文件相同的目录中。

Java。最后,使用以下命令运行它:

java -cp .:./jsoup-1.10.2.jar com.stackoverflow.q2835505.Test

这将使用您的当前目录 (.) 和 jsoup-1.10.2.jar 作为您的类路径来运行您的应用程序。当前目录是强制,所以java 可以找到您的Test.class 以及JSoup jar。


有关java 命令语法的更多信息,请参阅this nice answer

【讨论】:

  • 我尝试了很多不同的方法,但我无法运行它。
  • @geo 我发现了几个问题...请有机会再试一次。
猜你喜欢
  • 2021-01-02
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多