eclipse - 如何使用 Gradle 构建 Xtext Eclipse 插件?
问题描述
我用 Xtext 2.12 编写了一个 DSL,我的 Xtend 2.12 代码生成器从中生成 Java 8 代码。我正在使用 Eclipse Oxygen.3a。我首先创建了一个 Xtext 项目作为 Eclipse 插件,一切正常,但我希望现在所有的东西都由 Gradle 构建。为此,我在我的 Xtext 项目中添加了 Gradle 特性,并启动了“gradle init”来生成 build.gradle 和 settings.gradle 文件。我发现了 Xtext Gradle 插件(Xtext Builder 和 Xtend 编译器)的存在,并使用这些插件的文档编写了 build.gradle 脚本内容,但我并没有完全理解,而且毫不奇怪,我的 builder 不起作用。你能帮我正确设置这个构建器吗?
plugins {
id 'org.xtext.builder' version '2.0.3'
id "org.xtext.xtend" version "2.0.3"
}
apply plugin: 'java'
apply plugin: 'org.xtext.xtend'
apply plugin: 'eclipse'
sourceSets {
main.java.srcDirs = ['src','xtend-gen']
main.xtendOutputDir = 'xtend-gen'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile group: 'org.eclipse.xtend', name: 'org.eclipse.xtend.lib', version: '2.16.0'
compile group: 'org.eclipse.xtext', name: 'org.eclipse.xtext', version: '2.16.0'
compile group: 'org.eclipse.emf', name: 'org.eclipse.emf.codegen.ecore', version: '2.15.0'
compile group: 'org.eclipse.xtext', name: 'org.eclipse.xtext.xtext.generator', version: '2.16.0'
testCompile group: 'org.eclipse.xtext', name: 'org.eclipse.xtext.xbase.testing', version: '2.16.0'
}
xtext {
languages {
mapy {
setup = 'com.mchp.mapy.MapyStandaloneSetup'
generator.outlet.producesJava = true
}
}
sourceSets {
main {
srcDirs 'src','xtend-gen'
output {
dir(xtext.languages.mapy.generator.outlet, 'src-gen')
}
}
}
}
xtend {
}
- sourceSets 块应该位于哪里(在 xtext 块内部或外部)?
- xtext 块内容是否正确?
- 我应该在 xtend 块中写入什么?它甚至应该被宣布吗?
- 要运行什么 Gradle 任务来启动 MWE2 启动器和代码生成器?
以下是我的 Eclipse 项目组织的快照。在此先感谢您的时间!
解决方案
也可以使用 Eclipse PDE 构建 Xtext 插件。我创建了一个专用的 Eclipse 部署以减小发布到工件存储库的大小(最小化然后安装 PDE、JDT 和 Xtext 项目)。然后只需编写 Gradle 任务(或插件)来拉下 Eclipse,将其解压缩到构建目录,复制到 Xtext Eclipse 项目中(在复制之前使用 Xtext Gradle 插件构建 DSL),最后调用在 Eclipse 中使用 Java 命令和 AntRunner 的 Ant PDE 任务。输出应该是一个基本更新站点,您可以从该站点从本地安装插件或发布到 Artifact 存储库以进行共享。
需要对 Eclipse PDE 构建过程有很好的理解。我在“插件开发环境指南 > 任务 > PDE 构建”部分的 Eclipse 帮助 ( https://help.eclipse.org/2020-06/index.jsp )中找到了我需要的大部分内容
我在 Xtext 版本升级过程中遇到了一些问题,包括各种依赖冲突和 Eclipse 错误。这些通常可以在 Xtext 开发团队的帮助下解决,然后强制 Gradle 中的某些依赖项。
不幸的是,我不能分享任何构建,因为它是专有代码,但我希望上面的解释对于任何需要自动化过程的人来说已经足够了。设置起来当然不是一件简单的事情。