tldr;
当我使用DSL-B(依赖于DSL-A)构建项目时,generateXtext gradle任务经常执行DSL-A的JvmModelInferrer。
详情
以下是重现此问题的简单示例:ex.xtext.twog
有2个xtext项目:
和2个使用xtext项目的演示项目:
def DefStr java.lang.String
use UseStrCls DefStr
我已经向JvmModelInferrers添加了一些调试日志消息,以查看发生了什么 demoB中的xtext生成调用AJvmModelInferrer 3次(参见build output):
:demoB:generateXtext
AJvmModelInferrer: infer definition=DefStr isPreIndexingPhase=true
AJvmModelInferrer: infer definition=DefStr isPreIndexingPhase=false
BJvmModelInferrer: infer use=UseStrCls isPreIndexingPhase=true
BJvmModelInferrer: infer use=UseStrCls isPreIndexingPhase=false
AJvmModelInferrer: infer definition=DefStr isPreIndexingPhase=false
为什么在AJvmModelInferrer
之后再次调用BJvmModelInferrer
?
注意:我找不到关于如何使用多个语法的好文档或示例,所以很可能,我在设置中做错了 - 这里是相关部分:
demoA
的src/main/java
添加为资源目录,以便xtext模型A位于jar文件中(因此demoB
可以找到它)< / LI>