【问题标题】:Xtext MWE2 Workflow crashing on GeneratorXtext MWE2 工作流在生成器上崩溃
【发布时间】:2021-04-01 21:23:01
【问题描述】:

我目前正在为一个遗留项目创建一个 Maven 构建,并且我正在尝试在 Maven 构建中执行 Xtext 语言的编译,如 here 所述。我能够运行构建,但是一旦 maven 启动 Xtext MWE2 工作流程,我就会在工作流程中遇到以下问题:

[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: Generator)
         org.eclipse.internal.xtend.xtend.parser.ParseException: extraneous input '-' expecting TEXT on line 289
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$3.handleError(XpandParseFacade.java:74)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$2.reportError(XpandParseFacade.java:63)
        at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:596)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.eclipse.internal.xpand2.parser.XpandParser.template(XpandParser.java:489)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:40)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:27)
        at org.eclipse.xpand2.XpandExecutionContextImpl$1.parse(XpandExecutionContextImpl.java:174)
        at org.eclipse.xtend.expression.ResourceManagerDefaultImpl.loadResource(ResourceManagerDefaultImpl.java:70)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:286)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:281)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findDefinition(XpandExecutionContextImpl.java:233)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.invokeDefinition(ExpandStatement.java:236)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.evaluateInternal(ExpandStatement.java:228)
        at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
        at org.eclipse.internal.xpand2.ast.AbstractDefinition.evaluate(AbstractDefinition.java:176)
        at org.eclipse.xpand2.XpandFacade.evaluate2(XpandFacade.java:62)
        at org.eclipse.xtext.generator.AbstractGeneratorFragment.generate(AbstractGeneratorFragment.java:42)
        at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.generate(AbstractAntlrGeneratorFragment.java:98)
        at org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment.generate(XtextAntlrGeneratorFragment.java:41)
        at org.eclipse.xtext.generator.DefaultGeneratorFragment.generate(DefaultGeneratorFragment.java:122)
        at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:154)
        at org.eclipse.xtext.generator.Generator.generate(Generator.java:396)
        at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:138)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
        at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
        at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
        at java.lang.Thread.run(Thread.java:748)

java.lang.RuntimeException: Problems running workflow at.jku.mevss.cdsl.GenerateConstraintDSL:
[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: Generator)
         org.eclipse.internal.xtend.xtend.parser.ParseException: extraneous input '-' expecting TEXT on line 289
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$3.handleError(XpandParseFacade.java:74)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$2.reportError(XpandParseFacade.java:63)
        at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:596)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.eclipse.internal.xpand2.parser.XpandParser.template(XpandParser.java:489)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:40)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:27)
        at org.eclipse.xpand2.XpandExecutionContextImpl$1.parse(XpandExecutionContextImpl.java:174)
        at org.eclipse.xtend.expression.ResourceManagerDefaultImpl.loadResource(ResourceManagerDefaultImpl.java:70)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:286)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:281)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findDefinition(XpandExecutionContextImpl.java:233)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.invokeDefinition(ExpandStatement.java:236)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.evaluateInternal(ExpandStatement.java:228)
        at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
        at org.eclipse.internal.xpand2.ast.AbstractDefinition.evaluate(AbstractDefinition.java:176)
        at org.eclipse.xpand2.XpandFacade.evaluate2(XpandFacade.java:62)
        at org.eclipse.xtext.generator.AbstractGeneratorFragment.generate(AbstractGeneratorFragment.java:42)
        at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.generate(AbstractAntlrGeneratorFragment.java:98)
        at org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment.generate(XtextAntlrGeneratorFragment.java:41)
        at org.eclipse.xtext.generator.DefaultGeneratorFragment.generate(DefaultGeneratorFragment.java:122)
        at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:154)
        at org.eclipse.xtext.generator.Generator.generate(Generator.java:396)
        at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:138)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
        at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
        at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
        at java.lang.Thread.run(Thread.java:748)

        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:104)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException:
[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: Generator)
         org.eclipse.internal.xtend.xtend.parser.ParseException: extraneous input '-' expecting TEXT on line 289
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$3.handleError(XpandParseFacade.java:74)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$2.reportError(XpandParseFacade.java:63)
        at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:596)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.eclipse.internal.xpand2.parser.XpandParser.template(XpandParser.java:489)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:40)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:27)
        at org.eclipse.xpand2.XpandExecutionContextImpl$1.parse(XpandExecutionContextImpl.java:174)
        at org.eclipse.xtend.expression.ResourceManagerDefaultImpl.loadResource(ResourceManagerDefaultImpl.java:70)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:286)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:281)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findDefinition(XpandExecutionContextImpl.java:233)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.invokeDefinition(ExpandStatement.java:236)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.evaluateInternal(ExpandStatement.java:228)
        at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
        at org.eclipse.internal.xpand2.ast.AbstractDefinition.evaluate(AbstractDefinition.java:176)
        at org.eclipse.xpand2.XpandFacade.evaluate2(XpandFacade.java:62)
        at org.eclipse.xtext.generator.AbstractGeneratorFragment.generate(AbstractGeneratorFragment.java:42)
        at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.generate(AbstractAntlrGeneratorFragment.java:98)
        at org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment.generate(XtextAntlrGeneratorFragment.java:41)
        at org.eclipse.xtext.generator.DefaultGeneratorFragment.generate(DefaultGeneratorFragment.java:122)
        at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:154)
        at org.eclipse.xtext.generator.Generator.generate(Generator.java:396)
        at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:138)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
        at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
        at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
        at java.lang.Thread.run(Thread.java:748)

        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.handleIssues(Mwe2Bridge.java:56)
        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:48)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
        at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
        at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
        ... 6 more

我四处搜索并试图找到一种使生成器更详细的方法,但找不到任何东西。不幸的是,我无法从错误消息中真正找到错误的来源,因为它说导致问题的元素是未知的。

我还手动检查了带有语言的 .xtext 文件中是否有任何松散的“-”符号,但找不到任何符号。 关于如何调试此问题的任何线索?我什至不确定从哪里开始挖掘。

【问题讨论】:

  • 没有更多信息,特别是语法的minimal reproducible example,这几乎是不可能解决的。
  • 很遗憾,由于 NDA 和项目的复杂性,我无法提供那么多。
  • 保密协议不会阻止您创建minimal reproducible example。您无需发布任何实际代码 - 只需重现错误的代码即可。
  • 部分问题是,由于异常的模糊性,我无法确定问题所在。我必须提供相当多的文件才能使示例可以运行——比如多个 pom 和依赖项。语言本身,可能是也可能不是错误,很可能也需要重现示例,这将是实际代码。我知道,用这么少的信息几乎不可能解决问题。相反,我正在寻找有关如何自己进一步调查该问题的建议。
  • 您还应该考虑迁移到不再使用 Xpand 的新生成器/工作流

标签: java maven xtext mwe


【解决方案1】:

根据您的comment,无法提供有关该项目的更多信息。相反,您正在寻找进一步调查根本原因的可能性。

我建议使用mvnDebug。此命令随 Maven 一起提供,并允许您调试 Maven 插件的执行。要正确设置它,您需要一个带有插件源代码的 Eclipse(或任何 IDE)。我猜,您使用的是xtext-maven-plugin,如链接所示。要获取源代码,我发现最简单的方法是使用插件作为依赖项设置一个新的 Maven 项目。确保版本相同,否则调试会产生有趣的结果。

<dependency>
    <groupId>org.eclipse.xtext</groupId>
    <artifactId>xtext-maven-plugin</artifactId>
    <version>${xtext-version}</version>
</dependency>

在您要调查的类之一中设置断点(例如 org.eclipse.internal.xpand2.parser.XpandParser.template(XpandParser.java:489))然后您使用 Maven 执行

mvnDebug verify

(或您使用的任何目标)而不是

mvn verify

然后,Maven 将等待远程调试器附加到其进程。在 Eclipse 中,您创建一个 Remote Java Application 类型的新调试配置并通过调试按钮启动它。

您可以从那里使用标准调试技术来查看错误发生的位置。

【讨论】:

  • 如果我在原始问题中链接的过程中使用 MWE2Launcher 执行构建,这是否也有效?如果我理解正确,exec-maven-plugin 在用于运行 Maven 的同一 VM 中执行给定主类的代码,但我不确定 mvnDebug 是否能够调试该插件执行的内容。我会试一试的。
  • @Radioo 我没有尝试过(因为我从未使用过 Xtext)。但是this answer 看起来像是使用了来自 Maven 的 VM 选项。由于调试是通过 VM 选项实现的,因此这可能起作用。如果没有,您可以尝试配置像here 这样的maven-exec-plugin 以包含必要的VM 标志。不是很漂亮......但出于调试目的,它可能就足够了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
相关资源
最近更新 更多