Как сгенерировать код из модели xcore во время сборки gradle - PullRequest
0 голосов
/ 25 января 2019

Итак, я пытаюсь собрать свой проект на сервере сборки. Мои dsl не удается собрать, потому что они основаны на коде из моей модели xcore, а сгенерированный код из модели xcore отсутствует в хранилище, из которого извлекается сервер сборки. Я не уверен, что на самом деле запускает генерацию кода на модели xcore. Итак, как я могу гарантировать, что код модели будет сгенерирован до того, как Gradle попытается построить другие мои dsl?

Прикрепленный build.gradle для проекта xcore:

repositories {
    jcenter()
}

configurations {
  xtextTooling.extendsFrom xcore // alias xtextTooling to xcore to prevent confusion
}

test {
    useJUnitPlatform()
}

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 "org.eclipse.xtext:org.eclipse.xtext:${xtextVersion}"
    compile "org.eclipse.xtext:org.eclipse.xtext.xbase:${xtextVersion}"
    compile 'org.eclipse.emf:org.eclipse.emf.ecore.xcore.lib:+'
    compile group: 'org.eclipse.xtext', name: 'org.eclipse.xtext.ecore', version: '2.15.0'

    xcore group: 'org.eclipse.emf', name: 'org.eclipse.emf.mwe2.lib', version: '2.9.1.201705291010'
    xcore group: 'org.eclipse.emf', name: 'org.eclipse.emf.codegen', version: '2.14.0'

    xcore 'org.eclipse.emf:org.eclipse.emf.codegen.ecore:+'
    xcore 'org.eclipse.emf:org.eclipse.emf.codegen.ecore.xtext:+'
    xcore 'org.eclipse.emf:org.eclipse.emf.ecore.xcore:1.3.1'
    xcore 'org.eclipse.emf:org.eclipse.emf.ecore.xcore.lib:+'
    xcore "org.eclipse.xtext:org.eclipse.xtext.ecore:${xtextVersion}"

}

xtext {
    version = "${xtextVersion}"
    languages {
        ecore {
            setup = 'org.eclipse.xtext.ecore.EcoreSupport'
        }
        codegen {
            setup = 'org.eclipse.emf.codegen.ecore.xtext.GenModelSupport'
        }
        xcore {
            setup = 'org.eclipse.emf.ecore.xcore.XcoreStandaloneSetup'
            generator.outlet.producesJava = true
        }

    }
}
sourceSets {
    main {
        resources {
            exclude '**/*.xcore'
        }
        java {
            srcDir 'build/xcore/main'
        }
    }
}

clean {
    delete 'build/xcore/main'
}

Я видел несколько примеров с немного другой областью xtext:

xtext {
    version = "${xtextVersion}"
    languages {
        ecore {
            setup = 'org.eclipse.xtext.ecore.EcoreSupport'
        }
        codegen {
            setup = 'org.eclipse.emf.codegen.ecore.xtext.GenModelSupport'
        }
        xcore {
            setup = 'org.eclipse.emf.ecore.xcore.XcoreStandaloneSetup'
            generator.outlet.producesJava = true
            output {
                dir 'build/xcore/main'
                producesJavaFor sourceSets.main
            }
        }

    }
}

, но если я пытаюсь использовать это, я получаю ошибку gradle:

Не удалось найти метод output () для аргументов [build _..._ run_closure ...] на объект типа org.xtext.gradle.tasks.Language

...