首页 > 解决方案 > 如何在 gradle 构建期间从 xcore 模型生成代码

问题描述

所以我试图在构建服务器中构建我的项目。我的 dsl 无法构建,因为它们依赖于我的 xcore 模型中的代码,并且来自 xcore 模型的生成代码不在构建服务器从中提取的存储库中。我不确定是什么真正启动了 xcore 模型上的代码生成。那么如何确保在 gradle 尝试构建我的其他 dsl 之前生成模型代码?

附加 xcore 项目的 build.gradle:

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 错误:

在 org.xtext.gradle.tasks.Language 类型的对象上找不到参数 [build_..._run_closure...] 的方法 output()

标签: gradlextextxcore

解决方案


推荐阅读