2017-10-11 53 views
1

我目前正在构建一个框架,它将从用于创建配置文件的DSL中受益,所以我使用Xtext创建了一个框架。如何在我的Maven项目中包含Xtext生成器?

现在我想的依赖添加到我创造这样我就可以在运行时生成的配置类,但Xtext's site它看起来像只有两例为一体化是:

  • 当我想CI语言本身;
  • 当我想包含一个插件,可以在构建时生成代码。

如何在我的Maven项目中使用我在Xtext中编写的生成器?

回答

1

对于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); 
     } 
    } 

} 
+0

这看起来不像我的用例,我认为。我想嵌入生成器,以便我可以在Maven项目中的另一个Java类中使用它。这看起来像构建时代。 –

+0

你能更清楚地了解你的用例吗? –

+0

我不知道如何更清楚地解释它。我想要一个打包的Maven依赖项,我可以添加到我的项目中,并从代码本身使用生成器。显示的示例是添加一个maven插件,可在构建期间生成代码。 –

相关问题