动态加速项目插件

时间:2015-07-21 03:29:38

标签: java eclipse eclipse-plugin eclipse-rcp acceleo

我想从已安装的插件中​​运行Acceleo项目,

即。我编写了一个使用Acceleo的插件,我想让它从工作区中的项目运行一个Acceleo模板。

目前,我有一个Acceleo项目,我以编程方式从我的Eclipse插件运行:

onTaskRemoved()

目前模板很简单:

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();
}

这完全可以生成。

问题是我需要部署插件,但我仍然需要最终用户才能修改模板。最终目标是将Acceleo项目放在最终用户的工作区中,让我的插件在运行时调用它,但无论我如何设置它,我都必须在我的插件功能中包含Acceleo项目。

我尝试的事情:

  • 从最终用户工作区中的项目覆盖Acceleo模块
  • 使用java类加载器的各种尝试(我觉得这是要走的路,但我似乎无法得到一个有效的例子)

我正在跑步:

  • Eclipse Luna SR2(4.4.2)
  • Windows 7 Pro - 64bitSP1
  • Acceleo3.5.1.201409021433
  • JRE 1.8.0_45

2 个答案:

答案 0 :(得分:0)

您尝试实现的目标可能不正确。 Acceleo将模板编译为Java代码并从中创建可执行类。 如果您希望最终用户修改模板,那么他们将需要在之后编译代码,即他们需要构建基础结构。

我建议您参数化SQL查询并编译模板。您可以创建一个实用Java类来公开函数&#34; getSQL ...()&#34;并从您的模板中调用它。 此实用程序类可以根据需要从.properties或其他源读取SQL。

然后编译并发布二进制加速项目,并教导用户在运行时需要配置的内容。

答案 1 :(得分:0)

我这样做:&#34;从生成的结构中获取参数数据并将其视为输入数据&#34;。换句话说,您可以通过模型传递数据:

该模型是您的输入,因此如果您想要一个已编译和可配置的Acceleo插件,您应该拥有一个&#34;配置元素&#34;在您的入口模型上(如果您使用的是UML,它可以是一个&#34;配置类&#34;),在这种情况下,您将能够进行&#34; blackbox m2t转换&#34;还有一些信息(通过你的入口模型),你可以从中做出决定。您可以从之前的m2m转换中添加这些元素(使用默认值)。如果你知道一点点&#34; eclipse rcp&#34;也许你可以创建这个配置元素并以编程方式将其添加到入口模型(作为文本),然后运行你的#34;论证转换&#34;或者你可以直接要求用户手动完成任务。也许这个解决方案无法解决您的所有问题,但基于此,您至少可以为最终用户提供各种转换选项。

写完这个答案之后,我觉得这很有趣,也许比我的建议更好:Acceleo M2T - Write timestamp into a generated file