0

我第一次在我的想法中遇到了这个问题,我写了一个扩展javax.servlet.http.HttpServlet的类,我的想法抛出了一条错误消息,上面写着Error: Could not find or load main class com.bjpowernode.OneServlet,这是图像: 在此处输入图像描述

可以看出idea没有显示红色波浪线,说明我的代码没问题。我从在此处输入链接描述找到了解决此问题的方法,我将范围从提供更改为编译: 在此处输入图像描述 但我实际上想知道它为什么以及如何工作?我对比了Idea不同作用域设置下编译指令的差异,发现Idea使用java命令运行.Class时,编译作用域的命令参数-classpath多了两个路径: D:\apache-tomcat- 8.0.50\lib\jsp-api.jar;D:\apache-tomcat-8.0.50\lib\servlet-api.jar 也就是说,Idea 在提供的范围内运行 .class 时没有考虑外部库路径,超类 HttpServlet 来自 servlet-api.jar 包。为什么?为了简化问题,我在两个不同的路径和包下创建了两个不同的类:Class Base 和 Class Sub,Sub extends Base。Base的代码在这里:

package base;
public class Base{
    public static void main(String[] args) {
    
    }
}

Sub的代码在这里:

package sub;
import base.Base;
public class Sub extends Base{
    public static void main(String[] args) {
        System.out.println("In Sub");
    }
}

Base 的路径是./path1/base/Base.java,Sub 的路径是./path2/sub/Sub.java。我使用这两个命令编译它们:

javac ./path1/base/Base.java -d ./path1
javac ./path2/sub/Sub.java   -d ./path2  -cp "./path1;./path2"

并编译成功。但是当我使用以下命令运行 sub.Sub 时:

java sub.Sub -cp "./path1;./path2"

我得到了同样的错误:

Error: Could not find or load main class sub.Sub

我已经尝试了多种变体,但似乎都不起作用。有任何想法吗?虽然解决了idea报错的问题,但还是看不懂背后的原理?我希望这个问题可以帮助我弄清楚。我的jdk版本是1.8。提前致谢。

4

0 回答 0