繁体   English   中英

找不到Eclipse JDT类ASTVisitor

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM