我试图在这些工具之间进行公平的比较,但这真的很难。
Xtext 与代码生成无关——它用于创建编辑器和解析器。
Xtend2 被设计为具有相似语法的 Xpand 的继任者 - 但是,它不是专门为代码生成量身定制的,而是作为一种通用语言,也可以很好地用于代码生成。其他生成引擎的主要区别在于您在源代码级别工作(基本上,Xtend2 转换为 Java),并且您必须提供自己的引擎来驱动生成 - 尽管当然可以使用建模工作流引擎这个原因 - 就像 Xpand 的情况一样。
Acceleo 更适合简单的代码生成。它的语法基于代码生成的 OMG 规范,并为开发代码生成提供了一个功能齐全的 IDE。但是,如果您在代码生成过程中需要复杂的控制结构,它可能不是最好的解决方案。
关于 M2T-JET,正如 Chris 所建议的,我会投反对票,除非有非常具体的需求。它的开发支持要弱得多(例如它的编辑器),并且更多地基于具有单个输出模板的想法,而不是 Xpand/Xtend/Acceleo 的更高级别、基于规则的方法。这会在代码生成期间带来更好的性能,但是,它通常会导致更难理解模板。忽略这一段,因为它太消极了。
总之,如果您只使用 EMF 模型,Acceleo 和 Xtend 都是代码生成的不错选择,您应该根据您(或您的团队)的专业知识和更具体的需求在它们之间进行选择。如果您需要同时支持 EMF 模型和其他数据源,那么 Acceleo 不是最佳选择;但是,JET 和 Xtend 都不是基于您的输入是 EMF 模型这一事实,而是提供了调用任何可用 Java 代码的简便方法。