我正在尝试构建maven acceleo generator
。
该生成器由多个加速项目(maven中的工件)组成,具有相互依赖性。
我遇到了emtl文件之间依赖关系的问题。 在运行时,我收到错误,指出mtl中存在编译错误(没有)。 我猜它可能是编译的emtl文件中的hrefs。
有一个acceleo maven编译插件允许这些插件:
a)绝对路径(最终通过maven存储库)
b)'platform:/plugin/...'
路径。
(a)如果加速项目(maven工件)构建在与我们生成代码的机器相同的机器上,则工作正常,但是如果maven存储库的位置发生变化,我们就会遇到问题。因此,部署maven工件最终毫无意义。
(b)不起作用,因为在maven内部运行,'platform:/plugin/'
无法解决。
我试图覆盖'createURIConverter'
中的AbstractAcceleoGenerator
方法,
然后使用URLClassLoader
我们可以解码'platform:/plugin/'
href并找到正确的emtl文件。
我可以验证这似乎有效,但我仍然得到报告的
"org.eclipse.acceleo.engine.AcceleoEvaluationException: Unresolved compilation error in generation module"
有什么建议吗?
答案 0 :(得分:1)
异常是由EMTL模型中的hrefs解析为null引起的。
解决hrefs的问题只是缺少资源工厂的注册(通知我在EcoreUtil.resolve中丢失了这个例外,它抓住了异常“//无法解决被忽略。” - 最无益的)
所以似乎我的方法是“覆盖'createURIConverter'方法,并使用URLClassLoader解码'platform:/ plugin / ..'”确实有效。
使用与AcceleoParserMojo相同的方法构建URLClassLoader。