首先,我使用默认值创建了一个xtext项目(以简单的Greetings语法为例)。
然后,我用一些代码(可以在下面看到)创建一个.java文件,并将其添加到验证文件夹中。
我已经在普通的Java项目中将一些jar加载到了构建路径中。如果我将特定的Java文件作为独立文件运行,它将加载库并运行代码。 Java文件非常简单:
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.xtext.example.mydsl.myDsl.Greeting;
public static void main(String[] args){
Greeting hey = null;
try {
test(hey);
} catch (OWLOntologyCreationException e) {
e.printStackTrace();
}
}
public static void test(Greeting imp) throws OWLOntologyCreationException {
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
System.out.println("success!");
}
但是,如果从.xtend验证程序文件中调用“测试”函数,则会生成此错误:
java.lang.NoClassDefFoundError: org/semanticweb/owlapi/model/OWLOntologyCreationException
at org.xtext.example.mydsl.validation.MyDslValidator.checkGreetingStartsWithCapital(MyDslValidator.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
/* (has some more "at" in the middle) */
Caused by: java.lang.ClassNotFoundException: org.semanticweb.owlapi.model.OWLOntologyCreationException cannot be found by org.xtext.example.mydsl_1.0.0.qualifier
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 32 more
当它提到“无法通过org.xtext.example.mydsl_1.0.0.qualifier找到”时,我认为问题出在清单中,但是我尝试了各种可能的方式将库添加到清单中,但无济于事。
最佳答案
如果您将库添加到构建路径
将其复制到插件中的新lib文件夹中
修改清单并将罐子添加为条目(运行时选项卡,类路径部分)
添加要包含在build.properties中的罐子(应该有警告和快速修复)
关于java - 无法在Eclipse中将库添加到xtext项目(返回错误),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40731406/