Xtext: не удалось разрешить ссылку на JvmType MyGeneratorModule - PullRequest
0 голосов
/ 02 января 2019

Я копирую структуру примера веб-проекта Xtext для нескольких dsl, используя пример Entities и StateMachine.Я использую Gradle в качестве моей системы сборки.У меня есть класс MyGeneratorModule в обоих моих проектах по грамматике.В моем рабочем процессе я ссылаюсь на это так:
configuration = MyGeneratorModule {...}
Я могу нормально запустить рабочий процесс в каждом проекте, но когда я пытаюсь выполнить jettyRun из веб-проекта, я получаю эту ошибку:

Task :com.selinc.logic.program:generateXtextLanguage FAILED
0    [main] ERROR mf.mwe2.launch.runtime.Mwe2Launcher  - [XtextLinkingDiagnostic: null:17 Couldn't resolve reference to JvmType 'MyGeneratorModule'.

Я что-то упускаю в рабочем процессе или сборке Gradle?Вот более полный пример файла и рабочего процесса моих языков build.gradle:

mwe2:

component = XtextGenerator {
        configuration = MyGeneratorModule { // <- This is what is not resolving
            project = StandardProjectConfig {
                baseName = baseName
                rootPath = rootPath
                runtimeTest = {
                    enabled = true
                }
                web = {
                    enabled = true
                    root = "../myWebProject"
                    src = "../myWebProject/src/main/java"
                    srcGen = "../myWebProject/src/main/xtext-gen"
                    assets = "../myWebProject/src/main/webapp"
                }
                mavenLayout = true
            }
            code = {
                encoding = "UTF-8"
                lineDelimiter = "\r\n"
                fileHeader = "/*\n * generated by Xtext \${version}\n */"
            }
        }
        cleaner = {
            exclude = "MyOtherLanguageWebModule.java"
        }
        language = StandardLanguage {
            name = "MyLang"
            fileExtensions = "lang"
            serializer = {
                generateStub = false
            }
            webSupport = {
                generateHtmlExample = true
                framework = "CODEMIRROR"
                generateJsHighlighting = false
                generateServlet = false
                generateWebXml=true 
            }
            junitSupport = {
                junitVersion = "5"
            }
        }
    }

build.gradle:

    dependencies {
    testCompile "org.junit.jupiter:junit-jupiter-api:5.1.0"
    testRuntime "org.junit.jupiter:junit-jupiter-engine:5.1.0"
    testCompile "org.eclipse.xtext:org.eclipse.xtext.testing:${xtextVersion}"

    compile project(':myOtherLang')
    compile project(':myXCoreModel')
    compile project(":util")

    compile group: 'org.eclipse.xtext', name: 'org.eclipse.xtext.ecore', version: '2.15.0'
    compile "org.eclipse.xtext:org.eclipse.xtext.xbase:${xtextVersion}"
}
sourceSets {
    mwe2 {}
}
configurations {
    mwe2 {
        extendsFrom compile
    }
    mwe2Compile.extendsFrom mainCompile
    mwe2Runtime.extendsFrom mainRuntime
}
sourceSets.mwe2.java.srcDir 'generator'

dependencies {
    mwe2Compile "org.eclipse.emf:org.eclipse.emf.mwe2.launch:2.9.1.201705291010"
    mwe2Compile "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}"
    mwe2Compile "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}"
    mwe2Compile "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3)"

    //added for xcore support
    mwe2Compile 'org.eclipse.emf:org.eclipse.emf.ecore.xcore:1.3.1'
    mwe2Compile 'org.eclipse.emf:org.eclipse.emf.codegen.ecore.xtext:+'
}

task generateXtextLanguage(type: JavaExec) {
    main = 'org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher'
    classpath = project.sourceSets.mwe2.runtimeClasspath
    inputs.file "path/GenerateMyLang.mwe2"
    inputs.file "path/MyLang.xtext"
    outputs.dir "src-gen"
    args += "path/GenerateMyLang.mwe2"
    args += "-p"
    args += "rootPath=/${projectDir}/.."
}

test {
    useJUnitPlatform()
}
generateXtext.dependsOn(generateXtextLanguage)
clean.dependsOn(cleanGenerateXtextLanguage)
eclipse.classpath.plusConfigurations += [configurations.mwe2]

1 Ответ

0 голосов
/ 02 января 2019

У меня есть сомнения, если это сработает.код, из которого вы копируете, не генерирует язык xtext, вы должны переместить пользовательские модули в отдельный проект gradle и таким образом скомпилировать его отдельно.Вы можете поэкспериментировать с экспедицией gradle buildSrc / с отдельным исходным кодом папки

(я не уверен, работает ли этот сценарий использования)

dependencies {
    compile "org.eclipse.xtext:org.eclipse.xtext:${xtextVersion}"
    compile "org.eclipse.xtext:org.eclipse.xtext.xbase:${xtextVersion}"
}
sourceSets {
    mwe2 {}
}
configurations {
    mwe2 {
        extendsFrom compile
    }
    mwe2Compile.extendsFrom mainCompile
    mwe2Runtime.extendsFrom mainRuntime
}
sourceSets.mwe2.java.srcDir 'generator'

dependencies {
    mwe2Compile "org.eclipse.emf:org.eclipse.emf.mwe2.launch:2.9.1.201705291010"
    mwe2Compile "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}"
    mwe2Compile "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}"
    mwe2Compile "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3)"
}

task generateXtextLanguage(type: JavaExec) {
    main = 'org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher'
    classpath = project.sourceSets.mwe2.runtimeClasspath
    inputs.file "src/org/xtext/example/mydsl/GenerateMyDsl.mwe2"
    inputs.file "src/org/xtext/example/mydsl/MyDsl.xtext"
    outputs.dir "src-gen"
    args += "src/org/xtext/example/mydsl/GenerateMyDsl.mwe2"
    args += "-p"
    args += "rootPath=/${projectDir}/.."
}

generateXtext.dependsOn(generateXtextLanguage)
clean.dependsOn(cleanGenerateXtextLanguage)
eclipse.classpath.plusConfigurations += [configurations.mwe2]
...