1
我目前正在构建一个框架,它将从用于创建配置文件的DSL中受益,所以我使用Xtext创建了一个框架。如何在我的Maven项目中包含Xtext生成器?
现在我想的依赖添加到我创造这样我就可以在运行时生成的配置类,但Xtext's site它看起来像只有两例为一体化是:
- 当我想CI语言本身;
- 当我想包含一个插件,可以在构建时生成代码。
如何在我的Maven项目中使用我在Xtext中编写的生成器?
我目前正在构建一个框架,它将从用于创建配置文件的DSL中受益,所以我使用Xtext创建了一个框架。如何在我的Maven项目中包含Xtext生成器?
现在我想的依赖添加到我创造这样我就可以在运行时生成的配置类,但Xtext's site它看起来像只有两例为一体化是:
如何在我的Maven项目中使用我在Xtext中编写的生成器?
对于Xtext本身的CI,请使用新项目向导,并在项目的第二页选择Maven作为构建系统。要构建您的模型文件,请看xtext-maven-plugin
例如这里使用https://github.com/xtext/maven-xtext-example/blob/master/example-project/pom.xml或这里https://github.com/cdietrich/xtext-maven-example/blob/master/org.xtext.example.mydsl.model/pom.xml
如果你只是想读取模型文件并调用发电机
包org.eclipse.xtext.example.domainmodel;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.xtext.generator.GeneratorContext;
import org.eclipse.xtext.generator.GeneratorDelegate;
import org.eclipse.xtext.generator.IGeneratorContext;
import org.eclipse.xtext.generator.JavaIoFileSystemAccess;
import org.eclipse.xtext.util.CancelIndicator;
import org.eclipse.xtext.validation.CheckMode;
import org.eclipse.xtext.validation.IResourceValidator;
import org.eclipse.xtext.validation.Issue;
import com.google.common.collect.Lists;
import com.google.inject.Injector;
/**
* @author dietrich - Initial contribution and API
*/
public class Main {
public static void main(String[] args) {
// TODO traverse directory
List<String> files = Lists.newArrayList("model/a.dmodel", "model/b.dmodel");
Injector injector = new DomainmodelStandaloneSetup().createInjectorAndDoEMFRegistration();
ResourceSet rs = injector.getInstance(ResourceSet.class);
ArrayList<Resource> resources = Lists.newArrayList();
for (String file : files) {
Resource r = rs.getResource(URI.createFileURI(file), true);
resources.add(r);
}
IResourceValidator validator = injector.getInstance(IResourceValidator.class);
for (Resource r : resources) {
List<Issue> issues = validator.validate(r, CheckMode.ALL, CancelIndicator.NullImpl);
for (Issue i : issues) {
System.out.println(i);
}
}
GeneratorDelegate generator = injector.getInstance(GeneratorDelegate.class);
JavaIoFileSystemAccess fsa = injector.getInstance(JavaIoFileSystemAccess.class);
fsa.setOutputPath("src-gen-code/");
GeneratorContext context = new GeneratorContext();
context.setCancelIndicator(CancelIndicator.NullImpl);
for (Resource r : resources) {
generator.generate(r, fsa, context);
}
}
}
这看起来不像我的用例,我认为。我想嵌入生成器,以便我可以在Maven项目中的另一个Java类中使用它。这看起来像构建时代。 –
你能更清楚地了解你的用例吗? –
我不知道如何更清楚地解释它。我想要一个打包的Maven依赖项,我可以添加到我的项目中,并从代码本身使用生成器。显示的示例是添加一个maven插件,可在构建期间生成代码。 –