自定义语言的 Gradle 插件

2024-02-13

我有一种自定义语言(假设它是 MyLang,但它可以是任何语言),我想为其制作一个插件。该插件需要

  • 能够识别 DSL 给定语言的源集
  • 能够使用可执行文件(编译器)来编译它们

我能够创建一个带有编译任务(还为空)的插件,并使用 @LanguageType 将语言名称设置为“mylang”来注释函数。

如何修改插件,以便可以使用 DSL(如 sourceSets { mylang { ... } })从 build.gradle 文件添加源集?

如何修改构建任务才能构建源集的文件?

  class MylangBuildPlugin implements Plugin<Project> {
    static final String COMPILE_TASK_NAME = 'compileMylang'

    void apply(Project project) {
        project.getPluginManager().apply(ComponentModelBasePlugin.class);
        createCompileTask(project)
    }

    @LanguageType
    void registerLanguage(LanguageTypeBuilder<BaseLanguageSourceSet> builder) {
        builder.setLanguageName("mylang");
        builder.defaultImplementation(BaseLanguageSourceSet.class);
    }


    private void createCompileTask(Project project) {
        project.task(COMPILE_TASK_NAME) {
        }
    }
  }

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义语言的 Gradle 插件 的相关文章

随机推荐

  • 如何在 pandas 中进行左外连接排除

    我有两个数据框 A 和 B 我想在 A 中获取它们 但不在 B 中 就像左上角正下方的数据框一样 数据框 A 有列 a b others B 有列 a b others 没有 NaN 值 我尝试了以下方法 1 dfm dfA merge d
  • ISO 8601 中的时间戳 - 最后 6 位数字 yyyy-MM-dd'T'HH:mm:ss。

    我的时间戳看起来像这样 2015 03 21T11 08 14 859831 2015 03 21T11 07 22 956087 我读了一篇关于 ISO 8601 的 Wiki 文章 https en wikipedia org wiki
  • pandas - 计算另一列中每个唯一值的 DataFrame 中值的出现次数

    假设我有一个数据帧 term score 0 this 0 1 that 1 2 the other 3 3 something 2 4 anything 1 5 the other 2 6 that 2 7 this 0 8 someth
  • MySQL按日期分组的累积和

    我知道有一些与此相关的帖子 但我的情况有点不同 我想在这方面获得一些帮助 我需要从数据库中提取一些数据 这些数据是每天交互的累积计数 目前这就是我所拥有的 SELECT e Date AS e date count e ID AS num
  • 如何将 dll 导入到在网络服务器上运行的 ASP.NET Web 应用程序中

    我在 VS 2010 中创建了一个 dll 我将其放入网络服务器上的 app code 文件夹中 然后我通过尝试使用来访问它imports GetWebPageData 如果这意味着什么的话 dll 位于 bin debug 下的 vs 项
  • 如何在Java中的不同类中使用相同的对象

    假设我有 3 个 java 类 A B 和 C 我需要创建一个在 A 和 B 中都使用的 C 类对象 但单独创建该对象的问题是类 c 的构造函数被调用了 2 次 但我希望构造函数只被调用一次 所以我想将A类中创建的对象使用到B类中 因此 创
  • 如何从 Web api 控制器返回文件?

    我正在使用 MVC 5 Web Api 控制器 我想返回一个文件 Route public HttpResponseMessage GetFile var statusCode HttpStatusCode OK FileStream fi
  • jQuery 倒计时有问题吗?函数serverSync:服务器时间

    serverSync serverTime函数从服务器返回值 但我检查了服务器和客户端时间是否相同 当我调用服务器与服务器同步时 它不会显示倒计时 帮我 function var shortly new Date var newTime n
  • SQL更新记录,每次从1开始递增值

    我使用单个插入语句将批量记录添加到表中 我希望为每个新批次分配递增的数字 但每次都从 1 开始 所以 如果我有 Batch Name IncementingValue 1 Joe 1 1 Pete 2 1 Andy 3 2 Sue 1 2
  • Scrapy好像没有做DFO

    我有一个网站 我的爬虫需要遵循一定的顺序 例如 在开始进行 a2 之前 它需要先进行 a1 b1 c1 等操作 a b 和 c 中的每一个都由不同的解析函数处理 并且相应的 url 在 Request 对象中创建并生成 下面粗略地说明了我正
  • 不允许的参数嵌套属性 -rails

    我正在尝试向 2 个表提交表单 但不知何故我收到了此语法错误unexpected n 在这条线上joins sources landslide id and found unpermitted parameter sources在滑坡参数中
  • 无法从 Sequel gem 连接 mysql

    当我尝试从 Sequel 连接到 MySQL 时 我收到这些错误 require rubygems require sequel DB Sequel connect adapter gt mysql user gt root host gt
  • DependencyProperty 未在 NotifyCollectionChanged 事件上通知 UI

    我正在使用一个自定义控件 该控件具有选定的项目依赖属性 我已将其连接到集合更改事件 但未通知 UI 并且 PropertyChanged 事件始终为空 通常我会说这是一个数据上下文问题 但我无法更改控件上的数据上下文 因为不会显示任何数据
  • 如何使用Matlab的bsxfun求解累加和

    我有以下 慢 代码 A is n by m matrix B is n by m by d matrix C is n by m by d matrix R is 1 by d vector A zeros n m for i 1 d A
  • 将 XML 实体保留在输出中 (jSoup)

    我正在使用 jsoup 进行一些 xml 处理 问题是 它正在替换 xml 实体 即 187 与 html 实体 raquo 我如何保留原始 xml 实体 常规脚本 import org jsoup Jsoup import org jso
  • Vue 警告客户端渲染的虚拟 DOM 树与服务器渲染的内容不匹配

    我正在尝试使用 Vue js 和 Nuxt 在表中循环 tr 但是当我加载页面时出现以下错误 vue runtime esm js 2b0e 619 Vue warn 客户端渲染 虚拟 DOM 树与服务器渲染的内容不匹配 这是 可能是由不正
  • Eclipse 停止编译 RenderScript 文件

    我的 Android 项目中有一个 RenderScript rs 文件 SomeScript rs 在我开发它的过程中 它运行得很好 但后来我在 Eclipse 中清理了工作区 现在它似乎没有将该文件识别为 RenderScript 文件
  • Symfony:错误:尝试调用函数“ctype_digit”

    我尝试在服务器上安装 Symfony 3 3 项目时遇到错误 我正在使用 Apache HTTP 服务器和 PHP 7 0 当我访问 app dev php 时 它显示该错误 UndefinedFunctionException Attem
  • 如何删除旧的不需要的设备?

    所以这与我之前发布的问题有关 如何删除4 3模拟器 https stackoverflow com q 10834817 96716 我愚蠢地安装了 iOS 5 0 模拟器 现在我上一篇文章中提供的技术不起作用了 当您删除 5 0sdk 然
  • 自定义语言的 Gradle 插件

    我有一种自定义语言 假设它是 MyLang 但它可以是任何语言 我想为其制作一个插件 该插件需要 能够识别 DSL 给定语言的源集 能够使用可执行文件 编译器 来编译它们 我能够创建一个带有编译任务 还为空 的插件 并使用 Language