考虑以下代码:
// App.java
import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jdt.core.dom.SimpleName;
public class App
{
public static void main(String[] args)
{
ASTVisitor visitor = new ASTVisitor()
{
public boolean visit(VariableDeclarationFragment node)
{
return false;
}
public boolean visit(SimpleName node)
{
return false;
}
};
}
}
编译成功:
$ javac -cp org.eclipse.jdt.core.jar App.java
库org.eclipse.jdt.core.jar
是从最新版本的Eclipse复制的。运行该程序时:
$ java App -cp org.eclipse.jdt.core.jar
我收到以下运行时错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jdt/core/dom/ASTVisitor
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
...
实际上,这是另一个测试程序的精简版本,其中依赖项是使用 Maven 管理的,并给出了相同的错误。在寻找解决方案时,我发现提示这可能与缺少依赖项或未按正确顺序加载依赖项有关。但是,我不明白这是怎么发生的。检查我得到的用过的 jar :
$ jar tf org.eclipse.jdt.core.jar | grep ASTVisitor
org/eclipse/jdt/core/dom/DefaultASTVisitor.class
org/eclipse/jdt/core/dom/ASTVisitor.class
org/eclipse/jdt/internal/compiler/ASTVisitor.class
所以实际的类确实存在。除此之外,我尝试加载一堆相关的类,如 this link 的建议。 ,然后我再次尝试加载 Eclipse 安装附带的所有 JDT 类,但不幸的是没有结果。
问题可能是什么?我还能采取什么措施来找出问题所在?
非常感谢。
最佳答案
必须在“java”命令上运行的类之前指定“-cp”选项:
java -cp org.eclipse.jdt.core.jar App
您在类名后面放置的任何内容都将作为参数传递给程序。
关于java - Eclipse JDT 类 ASTVisitor 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370274/