未解决的参考:使用 kapt 时,Kotlin 在清理后需要 2 次构建才能拾取代码

2024-02-17

在我们的 Android 应用程序中,我们使用DBFlow https://github.com/Raizlabs/DBFlow访问 SQLite 数据库。我们通过 Kotlin 引用 DBFlow 生成的类。我们已经意识到这样一个事实:我们有 Java 中的模型类和数据库类作为代码生成行不通 https://github.com/Raizlabs/DBFlow/issues/596当用 Kotlin 编写这些类时。

然而,在每个项目清理之后,我们仍然需要构建代码两次。在设备上执行第一个构建会导致ClassNotFoundExceptions对于看似随机的 Kotlin 类(即使它们不访问由 DBFlow 或我们定义的任何模型类生成的代码)。当启用 Proguard 时,在编译时已经报告了相同的情况,这当然会导致构建失败。第二次构建总是成功的。

有趣的是,代码生成在第一次运行时就已经可以工作了 - 类就在那里并且也被 IDE 拾取。但编译器不知怎的找不到它们,让我认为代码生成在构建过程中发生得太晚了。另一方面,如上所述,还有一些未找到的类,它们不必与代码生成和/或注释处理进行任何操作。

那么有没有比第二次构建更好的解决方案呢?

作为参考,您的应用程序的相关部分build.gradle看起来像这样 - 就像DBFlow 文档 https://github.com/Raizlabs/DBFlow#including-in-your-project正在建议:

def dbflow_version = "3.0.0-beta4"

dependencies {
    kapt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"
    compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
    compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
}

kapt {
   generateStubs = true
}

Edit:我发现我对代码所做的每一次更改都必须重建两次。如果我之前没有清理过,它会在第一个构建中正确编译,但所做的更改根本没有被采纳。


如果您使用 kotlin 和 Retrolambda 这可能会修复它:

me.tatarka:gradle-retrolambda:3.4.0

github要点 https://gist.github.com/kibotu/fafd3047a46a7e838ab61a02804fb3ff

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

未解决的参考:使用 kapt 时,Kotlin 在清理后需要 2 次构建才能拾取代码 的相关文章

随机推荐

  • R tmap 打印意大利

    我想画一张地图 我需要打印的国家 地区是意大利 我使用以下代码 library sf library raster library dplyr library spData library spDataLarge library tmap
  • Bootstrap 4 面包屑中的文本右对齐

    我想右对齐 Bootstrap 4 的面包屑类中的链接 我用 BS3 中的 pull right 类很容易地做到了这一点 但是 BS4 的 float right 并不能完成这项工作 例如
  • Jquery Ajax 请求调用两次并且第一个请求未在标头中发送令牌

    我正在使用 ajax 调用基于 WCF REST 的服务 ajax 方法在页面加载之前调用 我希望在ajax请求的标头中发送一个 Token 在 fiddler 中 我看到的是这样的 1 请求头中没有令牌的服务请求 AJAX 调用失败 2
  • Highstock inputDateParser 触发三次

    我不确定是什么原因导致它在选择日期后触发三次日期日历 http bootstrap datepicker readthedocs org en release index html 这是设置的选项rangeSelector rangeSel
  • 使用 topojson 映射美国邮政编码时出错

    加载美国邮政编码 topojson 文件后 我在 d3 js 中收到错误 groupdata该行未定义 function bind group groupData var i n group length m groupData lengt
  • boost::bimap 用于枚举

    我正在尝试为 C 中的枚举创建一个简单的双向查找工具 我的单向查找工作正常 enum MyEnum One Two Three const boost unordered map
  • 如何在 Android 中打开拨号器并一步返回您的应用

    在我的应用程序中 我有一个带有电话号码的按钮 当用户单击它时 拨号器应用程序将打开 并显示电话字段中的号码 但是 如果我想从拨号器返回到我的应用程序 我应该按 返回 按钮 3 次 第一次按会关闭拨号器键盘 第二次按会将我带到拨号器历史记录菜
  • NHibernate 投影和“Having”子句

    我正在使用 NHibernate 通过条件 API 查询我的数据库 我的标准如下 ICriteria c Session CreateCriteria typeof Transaction ProjectionList projection
  • 清除 Marshmallow 以上操作系统版本上的缓存

    我想制作一个 Android 应用程序来清理其他应用程序的缓存 我已经弄清楚如何为棉花糖以下的 Android 版本执行此操作 This https github com Frozen Developers android cache cl
  • CSS - 将页面居中 - 然后使页面高度为 100%

    我正在尝试将页面居中 然后将其制作100 在高度上 我有一个名为 content 的 div 作为 HTML 页面中所有元素的父元素 接下来我需要做什么 我想远离任何 CSS hacks 目前该功能在 IE7 中有效 但在 Firefox
  • C++ 基数转换

    你好 我正在尝试将一些代码从 Windows 移植到 Linux 我有这个 itoa word aux 2 但 GCC 不承认 itoa 我如何以 C 方式进行到基数 2 的转换 谢谢 Here http en wikipedia org
  • 为什么 CreateProcess 在 Windows Server 2003 64 位中失败?

    我们有一个 32 位应用程序 它在其进程中启动其他 32 位应用程序 该应用程序在其他 64 位平台上运行良好 但在 Windows Server 2003 64 位平台上 我们在尝试启动应用程序时遇到错误 error 193 not a
  • Delphi中如何通过所有子目录搜索文件

    我已经在 Delphi 中实现了这段代码 它将搜索文件或给定的名称 但省略搜索所有子目录 如何才能做到这一点 Code if FindFirst filePath faAnyFile searchResult 0 then try repe
  • newFixedThreadPool.setCorePoolSize() 不使用线程,创建新的线程,这可能会产生开销

    newFixedThreadPool setCorePoolSize 不使用线程 而是创建新线程 解释 我创建了一个大小为 2 的 newFixedThreadPool 如果该池的两个线程都很忙 我会使用 setCorePoolSize 向
  • 使用 PHP 在网站上切换语言

    我只是在寻求一些建议 我正在创建一个提供 至少 2 种语言的网站 我设置它的方法是使用 PHP 语言的 XML 文件来检索 XML 节点中的值 假设您有任何 XML 文件 加载方式如下 一旦文件内容可用 我只需将每个节点输出到 HTML 标
  • AVPlayer - 播放时切换流质量

    我在用着AVPlayer为了播放 youtube 视频 对于每个 youtube 视频 ID 我检索几个不同质量的流 url 我想根据网络状态播放特定的流质量 例如 如果用户使用 3G 我想播放最低质量的 URL 但如果用户移动到 wifi
  • 有没有办法知道 WPF 应用程序是否正在关闭?

    我正在编写一些代码来检查我的资源是否已正确清理 当应用程序关闭时 资源不会被清理 这很好 但是 这使我的检查代码失败 有没有办法知道 WPF 应用程序是否正在关闭 像Application Current IsShuttingDown 之类
  • C 程序如何在不终止的情况下生成自身的核心转储?

    我希望 C 程序在某些情况下生成核心转储 这是一个在生产环境中运行的程序 不容易停止并重新启动以调整其他类型的调试代码 另外 由于是在生产环境中 我不想调用 abort 正在调查的问题不容易在非生产环境中复制 我想要的是程序在检测到某些问题
  • 由于异常而无法创建 SOAP 消息:无法创建 StAX 读取器或写入器

    我现在正在改变整个问题 我正在尝试连接到 SOAP 服务 在 Windows 上 在应用程序和 SoapUI 上 它都可以正常工作 在 Linux 上 它们都不起作用 Linux 上相同请求的输出如下
  • 未解决的参考:使用 kapt 时,Kotlin 在清理后需要 2 次构建才能拾取代码

    在我们的 Android 应用程序中 我们使用DBFlow https github com Raizlabs DBFlow访问 SQLite 数据库 我们通过 Kotlin 引用 DBFlow 生成的类 我们已经意识到这样一个事实 我们有