首先,我使用默认值创建了一个 xtext 项目(以简单的 Greetings 语法为例)。
然后我创建了一个包含一些代码的 .java 文件(如下所示)并将其添加到验证文件夹中。
我已经将一些 jar 加载到构建路径中,就像在普通 Java 项目中一样。如果我将特定的 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 验证器文件调用“test”函数,则会生成此错误:
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 找到”时,我认为问题出在清单中,但我尝试以各种可能的方式将库添加到清单中,但无济于事。
如果将库添加到构建路径
我(仍然)有同样的问题。我创建了示例 Domainmodel Xtext 项目,并按照如下所述执行了每个步骤,但我无法让它工作。 (现在在 Windows 和 Linux 上都尝试过)
当我尝试将项目作为 Eclipse 应用程序运行时,总是出现此错误(添加 .jar 之前一切正常):
org/eclipse/xtext/example/domainmodel/DomainmodelRuntimeModule (发生在 org.eclipse.xtext.example.domainmodel.ui.DomainmodelExecutableExtensionFactory 中) 引起原因:java.lang.ClassNotFoundException:org.eclipse.xtext.example.domainmodel.DomainmodelRuntimeModule无法被org.eclipse.xtext.example.domainmodel.ui_2.32.0.qualifier找到 在 org.eclipse.osgi.internal.loader.BundleLoader.generateException(BundleLoader.java:541) 在 org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:536) 在 org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:416) 在 org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:168) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ... 113 更多
3:添加到类路径部分的 MANIFEST.ml 运行时选项卡中
也许错误是,一切都是在“主”项目文件夹“org.eclipse.xtext.example.domainmodel”中完成的,我还需要在“org.eclipse.xtext.example.domainmodel.ui”中进行更改“等等?