我想用安装好的插件运行Acceleo项目,
也就是说,我已经编写了一个使用Acceleo的插件,我希望它能够从工作区中的项目中运行Acceleo模板。
目前,我有一个Acceleo项目,我是通过编程方式从Eclipse插件运行的:
try {
final File outputDir = new File("C:/outputDir/");
List<String> arguments = new ArrayList<String>();
/*fc is an instance of a EMF Compare Comparison object
* the nsURI for it is http://www.eclipse.org/emf/compare
*/
Generate generator = new Generate(fc, outputDir, arguments);
generator.doGenerate(new BasicMonitor());
} catch (IOException e) {
e.printStackTrace();
}目前,模板很简单:
[comment encoding = UTF-8 /]
[module generate('http://www.eclipse.org/emf/compare')]
[template public generateElement(comparison : Comparison)]
[comment @main/]
[file ('update.sql', false, 'UTF-8')]
/*SQL UPDATE SCRIPT TEST*/
[comparison.getDifferences().toString() /]
[/file]
[/template]这就完美地产生了。
问题是,我需要部署插件,但我仍然需要最终用户能够修改模板。最终目标是让Acceleo项目在最终用户的工作区中,让我的插件在运行时调用它,但是无论我如何设置它,我都必须将Acceleo项目包含在我的插件功能中。
我尝试过的事情:
我在跑步:
发布于 2016-04-29 13:58:03
你想要达到的目标可能被错误地定义。Acceleo将模板编译成Java代码,并从它们创建可执行类。如果您希望最终用户修改模板,那么他们需要编译代码,也就是说,他们需要构建基础结构。
我建议您将SQL查询参数化并编译模板。您可以创建一个实用程序Java类,公开一个函数“getSQL.()”,并从模板中调用它。此实用工具类可以从.properties或其他源读取SQL。
然后编译并发布二进制acceleo项目,并教用户在运行时需要配置什么。
发布于 2017-01-17 03:20:59
我是这样做的:“从生成的结构中获取参数数据,并将其作为输入数据处理”。换句话说,您可以通过模型传递数据:
模型是您的输入,所以如果您想要有一个已编译和可配置的Acceleo插件,您可能应该在您的入口模型上有一个“配置元素”(如果您正在使用UML,它可以是一个“配置类”),在这种情况下,您将能够拥有一个“黑匣子m2t转换”,以及一些信息(通过您的入口模型),您可以从中做出决定。您可以从以前的m2m转换中添加这些元素(默认值)。如果您知道一些"eclipse“,也许您可以创建这个配置元素,并以编程方式将其添加到您的入口模型(作为文本),然后运行您的”有争议的转换“,或者您只需要让用户手动完成任务。也许这个解决方案不能解决您所有的问题,但是在此基础上,您至少可以为最终用户提供各种转换选项。
写完这个答案后,我觉得这个很有趣,也许比我的建议更好:Acceleo M2T - Write timestamp into a generated file
https://stackoverflow.com/questions/31529853
复制相似问题