使用Xtext生成的工件

时间:2013-09-04 11:09:42

标签: java eclipse maven xtext

我目前正在研究Xtext,以创建可重复使用的DSL和基于DSL构建的工件。 简化的项目布局如下:

  • projectA:包含基于Xtext的DSL,功能项目,更新等等。
  • projectB:使用projectA中的工件生成代码。
  • projectC:使用projectB生成的代码

使用Maven和Xtext构建projectA不是问题(网上已经有几个例子),但是我没有得到如何在projectB中使用projectA中的DSL并释放生成的代码以便在projectC中使用。我可以找到的教程,文档和每个例子都使用projectA生成的Eclipse插件在projectB中生成代码。虽然这很好用,但我想知道如何重用生成的代码。

是否可以使用projectA中的代码生成器与Maven或类似的东西?我应该如何在持续集成服务器中使用DSL?我是否为此运行Eclipse无头?

在我看来,我错过了一些明显的东西。所以欢迎任何指针,提示和示例!

1 个答案:

答案 0 :(得分:0)

可以使用Fornax MWE运行器从Xtext生成代码(遗憾的是,在Maven Central中没有http://www.fornax-platform.org/m2/repository)。

我们在EMF-IncQuery(corresponding pom file)中使用这种方法,基于基于Tycho的编译

1.配置clean插件以清空src-gen和xtend-gen文件夹(来自所有相关项目,例如core,test和ui项目)  2.使用Fornax插件执行MWE2工作流程  3.执行Xtend编译器(某些代码生成为Xtend类)

其他(主要是存储库和Xtend编译器版本)配置已添加到我们构建的parent pom

更新:回答错误的问题;抱歉。尝试不同的答案。

首先,您必须以无头环境中的可集成方式实现您的语言/编译器(请参阅打包xtend-maven编译器的方式)。

你的语法已经有了一个接收模型的生成器(实现IGenerator接口)和一个用于创建文件的辅助类。对于使用Xbase的语法,这个生成器是由Xtext实现的,否则你应该已经实现了它。

然后,您可以提供使用此生成器的其他项目,从而能够生成此类代码。基本上,使用您的语言StandaloneSetup /无头注入器来获取IGenerator实例(在新项目中),并添加一个根据您的构建参数化的新FileSystemAccess实例。

然后你的项目应该引用原始项目 - 例如它也可以是一个插件项目,用Tycho构建它,然后将它用作基于jar的编译器;或者您可以创建纯Maven插件,但在这种情况下,您可能需要手动选择Xtext所需的传递依赖项。

如果是xtend-maven-compiler插件,可以通过将所有依赖项复制到单个jar文件中来创建“uberjar”来解决,然后引用它。丑陋,但它确实有效。