Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Xtext生成的工件_Java_Eclipse_Maven_Xtext - Fatal编程技术网

Java 使用Xtext生成的工件

Java 使用Xtext生成的工件,java,eclipse,maven,xtext,Java,Eclipse,Maven,Xtext,我目前正在研究Xtext,以创建一个可重用的DSL和一个构建在DSL之上的工件。 简化的项目布局如下所示: projectA:包含基于Xtext的DSL、功能项目、更新站点等 projectB:使用projectA中的工件生成代码 projectC:使用projectB生成的代码 使用Maven和Xtext构建projectA不是问题(网上已经有几个例子了),但是我不知道如何在projectB中使用projectA的DSL并在projectC中发布生成的代码。教程、文档和我能找到的每一个示例

我目前正在研究Xtext,以创建一个可重用的DSL和一个构建在DSL之上的工件。 简化的项目布局如下所示:

  • projectA:包含基于Xtext的DSL、功能项目、更新站点等
  • projectB:使用projectA中的工件生成代码
  • projectC:使用projectB生成的代码
使用Maven和Xtext构建projectA不是问题(网上已经有几个例子了),但是我不知道如何在projectB中使用projectA的DSL并在projectC中发布生成的代码。教程、文档和我能找到的每一个示例都在使用projectA生成的Eclipse插件在projectB中生成代码。虽然这很好,但我想知道如何重用生成的代码

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

在我看来,我错过了一些明显的东西。因此,欢迎提供任何指导、提示和示例

可以使用Fornax MWE runner从Xtext生成代码(遗憾的是,Maven Central中没有,但在中没有)

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

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

额外的(主要是存储库和Xtend编译器版本)配置被添加到我们的构建中

更新:回答了一个错误的问题;很抱歉尝试一个不同的答案

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

您的语法已经有一个生成器(实现接口),用于接收模型和用于创建文件的帮助器类。在Xbase使用语法的情况下,此生成器由Xtext实现,否则您应该已经实现了它

然后,您可以提供一个使用此生成器的附加项目,从而能够生成这样的代码。基本上,使用您的语言StandaloneSetup/headless injector获取IGenerator实例(在新项目中),并添加一个新的FileSystemAccess实例,该实例根据您的构建进行参数化

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


对于xtend maven编译器插件,可以通过将所有依赖项复制到单个jar文件中来创建一个“uberjar”来解决这个问题,然后引用它。难看,但它可以工作。

在我的示例中,此配置不是用于“projectA”吗?例如,将MyDSL.xtext和GenerateMyDSL.mwe2转换为“projectB”使用的内容?如何将“projectB”中的Something.mydsl转换为Java并打包成.jar;回答不好。重写了我的全部答案。非常感谢你的建议。