[英]Eclipse JDT class ASTVisitor not found
考虑以下代码:
// 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 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
所以实际的课程确实在那里。 除此之外,我尝试加载此链接建议的一堆相关类,然后再次尝试加载Eclipse安装随附的所有JDT类,但不幸的是没有结果。
问题可能是什么,我还可以采取什么措施来找出问题?
非常感谢你。
必须在要在“ java”命令上运行的类之前指定“ -cp”选项:
java -cp org.eclipse.jdt.core.jar App
您在类名之后加上的任何内容都将作为参数传递给程序。
感谢greg-449发现命令行使用错误。 解决此问题后,我能够成功运行该示例。
经过一些其他试验之后,我发现由于某种原因,这些使用Eclipse JDT的程序即使成功编译后也无法运行,除非我将直接从实际Eclipse安装中获取的jar添加到类路径中。 这意味着在将Eclipse jar添加到类路径后,我可以成功运行使用Maven依赖项编译的程序(较复杂的程序):
$ cd my-project/
$ mvn install
$ cd target
$ java -cp "myprogram.jar:../lib/*" path.to.my.main.Class
lib
包含一堆来自我的Eclipse安装的jar。
实际上,根本不需要链接Eclipse jar文件。 实际上,当使用maven-exec-plugin
而不是直接调用java
命令时,一切都可以正常工作:
$ mvn exec:java -Dexec.mainClass=path.to.my.main.Class
仔细考虑一下,现在看来,当我调用命令mvn exec:java
时,Maven会自动链接项目依赖项的jar文件,该文件在安装期间下载到~/.m2
中。 可能我可以得到相同的结果,将~/.m2
存储的jar添加到类路径中,而不是手动复制Eclipse安装中提供的jar。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.