将Xtext Eclipse项目移植到Maven

2hh7jdfx  于 9个月前  发布在  Maven
关注(0)|答案(1)|浏览(78)

我正在尝试将现有的Xtext 2.21.0项目从Eclipse 2020-03移植到Maven。
我使用Eclipse生成了一个XtextMaven项目示例,然后用我的DSL填充它。问题是我的语法找不到对其他语法的引用。

529  ERROR XtextGeneratorLanguage - [XtextLinkingDiagnostic: null:1 Couldn't resolve reference to Grammar 'abc.generator.ServiceGenerator'., XtextLinkingDiagnostic: null:4 Couldn't resolve reference to EPackage 'http://www.generator.abc/ServiceGenerator'., XtextLinkingDiagnostic: null:117 STRING cannot be resolved to a rule, XtextLinkingDiagnostic: null:249 INT cannot be resolved to a rule, TransformationDiagnostic: null:248 Datatype rules may only use other datatype rules, lexer rules and keywords. (ErrorCode: InvalidDatatypeRule)]
531  ERROR Mwe2Launcher       - Problems running workflow abc.generator.GenerateRawNotificationGenerator: Problem parsing 'file:/C:/Users/xxx/Desktop/eclipse_plugin_pom/abc.generator/../abc.generator/src/abc/generator/VarDefinitionGenerator.xtext':
XtextLinkingDiagnostic: null:1 Couldn't resolve reference to Grammar 'abc.generator.ServiceGenerator'.
XtextLinkingDiagnostic: null:4 Couldn't resolve reference to EPackage 'http://www.generator.abc/ServiceGenerator'.
XtextLinkingDiagnostic: null:117 STRING cannot be resolved to a rule
XtextLinkingDiagnostic: null:249 INT cannot be resolved to a rule
TransformationDiagnostic: null:248 Datatype rules may only use other datatype rules, lexer rules and keywords. (ErrorCode: InvalidDatatypeRule)

POM文件只是Eclipse Xtext 2.21.0默认生成的POM,唯一的修改是我的项目名称和URI。
Mwe 2文件:

module abc.generator.GenerateRawNotificationGenerator

import org.eclipse.xtext.xtext.generator.*
import org.eclipse.emf.mwe.utils.StandaloneSetup
import org.eclipse.xtext.xtext.generator.model.project.*

var rootPath = ".."

Workflow {
    
    component = XtextGenerator 
    {
        configuration = 
        {
            project = StandardProjectConfig 
            {
                baseName = "abc.generator"
                rootPath = rootPath
                runtimeTest = 
                {
                    enabled = true
                }
                
                eclipsePlugin = 
                {
                    enabled = true
                }
                
                eclipsePluginTest = 
                {
                    enabled = true
                }
                
                createEclipseMetaData = true
            }
            code = 
            {
                encoding = "windows-1252"
                lineDelimiter = "\r\n"
                fileHeader = "/*\n * generated by Xtext \${version}\n */"
            }
        }
        
        language = StandardLanguage 
        {
            name = "abc.generator.ServiceGenerator"
            fileExtensions = "services"

            serializer = 
            {
                generateStub = false
            }
            
            validator = 
            {
                composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
            }
        }

        language = StandardLanguage 
        {
            name = "abc.generator.VarDefinitionGenerator"
            fileExtensions = "vardefinition"

            serializer = 
            {
                generateStub = false
            }
            
            validator = 
            {
                composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
            }
        }
    }
}

ServiceGenerator标题:

grammar abc.generator.ServiceGenerator with org.eclipse.xtext.common.Terminals
generate serviceGenerator "http://www.generator.abc/ServiceGenerator"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore

变容发生器标题:

grammar abc.generator.VarDefinitionGenerator with abc.generator.ServiceGenerator
generate varDefinitionGenerator "http://www.generator.abc/VarDefinitionGenerator"

import "http://www.generator.abc/ServiceGenerator"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore

我必须提到我对Xtext一点也不熟悉,但我对Maven很熟悉。这个项目在Eclipse 2020-03中运行得很好,但是我们需要摆脱Eclipse,因为它的bug。我尝试升级到Eclipse 2023-09,Java 17和Xtext 2.32.0,但项目无法工作(一些注入变量返回为null)。
我不明白的是Eclipse plugin.xml文件是否应该添加到mwe 2文件中的某个地方。

<?xml version="1.0" encoding="windows-1252"?>
<?eclipse version="3.0"?>
<plugin>
    <extension point="org.eclipse.emf.ecore.generated_package">
        <package 
            uri = "http://www.generator.abc/ServiceGenerator"
            class = "abc.generator.serviceGenerator.ServiceGeneratorPackage"
            genModel = "model/generated/ServiceGenerator.genmodel" />
    </extension>
    <extension point="org.eclipse.emf.ecore.generated_package">
        <package 
            uri = "http://www.generator.abc/VarDefinitionGenerator"
            class = "abc.generator.varDefinitionGenerator.VarDefinitionGeneratorPackage"
            genModel = "model/generated/VarDefinitionGenerator.genmodel" />
    </extension>
</plugin>
rm5edbpk

rm5edbpk1#

你可以用第二种语言来描述第一种语言

language = StandardLanguage {
    referencedResource="platform:/resource/<project>/src/<PathTo>/<ParentDsl>.xtext"

相关问题