我正在尝试使用Eclipse编写Eclipse-Plugin。该插件使用org.eclipse.jdt.core。 在我的代码中的某个时刻,我从菜单操作处理程序中获取了CompilcationUnit的对象,我想找到使用我的插件点击的java文件路径。
首先,在获取#34; CompilcationUnit"类型的对象的行上,我得到了NoClassDefFoundError(我引用了我的eclipse / plugins文件夹中的org.eclipse.jdt.core.jar)。 这个帖子解决了这个问题: Eclipse plugin: java.lang.NoClassDefFoundError
类似的解决方案发现: Java eclipse : Importing jar file in eclipse plugin project
现在,我有一个不同的错误。我试图验证该元素是否为CompilationUnit类型,然后使用它。 我写了以下代码:
System.out.println(element.getClass());
System.out.println(org.eclipse.jdt.internal.core.CompilationUnit.class);
System.out.println(element instanceof org.eclipse.jdt.internal.core.CompilationUnit);
System.out.println(element.getClass().getPackage());
System.out.println(org.eclipse.jdt.internal.core.CompilationUnit.class.getPackage());
System.out.println(element.getClass().getProtectionDomain().getCodeSource().getLocation());
System.out.println(org.eclipse.jdt.internal.core.CompilationUnit.class.getProtectionDomain().getCodeSource().getLocation());
org.eclipse.jdt.internal.core.CompilationUnit cu = (org.eclipse.jdt.internal.core.CompilationUnit)element;
输出是这样的:
class org.eclipse.jdt.internal.core.CompilationUnit
class org.eclipse.jdt.internal.core.CompilationUnit
假
包org.eclipse.jdt.internal.core
包org.eclipse.jdt.internal.core
file:/ C:/ Program Files / Eclipse / plugins / org.eclipse.jdt.core_3.11.1.v20150902-1521.jar
文件:/ d:/Svn/OrderingTR/Source/ClassMethodsRearranger/external/org.eclipse.jdt.core_3.11.1.v20150902-1521.jar
然后我得到一个例外:
org.eclipse.e4.core.di.InjectionException: java.lang.ClassCastException: org.eclipse.jdt.internal.core.CompilationUnit cannot be cast to org.eclipse.jdt.internal.core.CompilationUnit
我不明白这一点。看起来元素与我的代码引用的类型相同。只有我的代码引用了ile中的类型:/ D:/Svn/OrderingTR/Source/ClassMethodsRearranger/external/org.eclipse.jdt.core_3.11.1.v20150902-1521.jar
并且该元素与同一jar的类型相同,仅位于文件中:/ C:/ Program Files / Eclipse / plugins / org.eclipse.jdt.core_3.11.1.v20150902-1521.jar。
现在,我需要在D:/ Svn / ...中引用该文件,因为这是项目的jar,eclipse插件需要它(否则我之前解决了NoClassDefFoundError)。 但是我无法使用菜单操作处理程序中获得的元素(我相信它起源于不同的jar文件)。我需要使用那个元素。 我能做什么?有人遇到过这种问题吗?我搜索并搜索了一下,并没有发现任何关于这个问题......看来这是eclipse插件和使用jdt.core特有的。
非常感谢,我非常感谢长篇大论。
答案 0 :(得分:0)
我最终通过在MANIFEST.MF中添加引用来解决它。 在依赖项中,我在必需的插件中添加了org.eclipse.jdt.core。