我第一次在我的想法中遇到了这个问题,我写了一个扩展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。提前致谢。