在Eclipse Java中,在开发Java项目时,我可以轻松地使用这些方法来编译外部Java文件:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, javaNamesArray);
然而,在Eclipse的DSL中,在Xtext项目中,完全相同的东西是不行的,因为JavaCompiler对象找不到JAR(在类路径中),也没有找到我自己的类二进制文件项目。为了能够编译,我必须导出我需要的类,并告诉编译器它们和JAR的位置。
为什么Xtext项目中的编译器行为如此不同?我错过了什么?
ps:然后,在加载类时,问题会自行重复
修改
实施例
我的代码中有这个界面:
public static interface CustomSWRLInterface {...}
然后我创建了一个外部Java文件(" swrl1.java"),其中包含类:
public class swrl1 implements CustomSWRLInterface {...}
我将Xtext项目作为Eclipse应用程序运行,它加载了我可以在DSL中编码的环境。我有一个Validator,试图将外部swrl1.java编译为swrl1.class。但是,它会产生很多这样的错误:
C:\Users\Manuel\Documents\EclipseDSLNeon\runtime-DSL1\Test\swrl\swrl1.java:4:
error: package org.mindswap.pellet does not exist import org.mindswap.pellet.ABox;
它没有找到与这些导入关联的JAR,也没有找到我定义接口的内部类。这个问题只发生在Xtext项目中,这让我认为,在启动Eclipse实例时,类路径或加载类的可见性会发生一些事情(但我不知道如何解决它)。