问题标签 [kapt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - kotlin 注释处理:检查给定的 TypeElement 是否来自 kotlin-class
我正在实现注释处理库,该库使用基于具有特定注释的类的 Java Pot 生成代码。
为了也使用用 kotlin 编写的类,我在示例项目中切换到了 kapt 而不是 apt。它适用于带注释的 java 类就好了。Bun kotlin-classes 对访问类字段有不同的方法:应该使用 getter 和 setter。
有没有办法确定给定的类(更具体地说 - 不是类而是 TypeElement - 因为这是在编译之前发生的)是 java 类还是用 kotlin 编写的?基于此,我可以编写生成字段访问或 getters-used 访问的代码。
android - Kapt gradle 任务异常:类转换异常
任务 ':app:kaptSomethingDebugKotlin' 执行失败。
我重构了我的一些类,并添加了一些 kotlin 类和具有裸函数的类。
当我尝试编译项目时,会发生这些奇怪的事情,并且异常堆栈跟踪都没有帮助我。
看来这个问题是由于 Kotlin java 组合造成的
android - Kotlin + Dagger 注入问题取决于设备的 Android 版本/SDK(?)
上周,在我当前的 Kotlin MVP 项目中实现 Dagger 时,我正在使用KitKat 4.4.2 的旧手机上测试它(是的,它仍然支持所有主要的材料特性和东西 :)),因为主要手机的维护。所以那一周我遇到了典型的问题,而不是一些不寻常的问题,并通过调查提供的错误或多或少地快速修复了它们。最后,代码编译,当前项目版本构建没有问题,并且在 KitKat 与 UI 交互上运行没有重大错误。
但是,当我从维修中心拿起带有Nougat 7.1.2 的主手机并在其上启动应用程序时,我遇到了与 DI 相关的奇怪问题。在那之后,我还在 mate 的Marshmallow 6.0 上启动了应用程序,又抓到了一个,完全一样。以这种方式简要描述了该问题:
应用程序(成功)启动;
我能够操作通过 context 和 fragmentManager 注入提供的 ViewPager/DrawerLayout/etc ui 功能;
所有服务也都可用并按预期通过注入运行;
当我抽动 Activity 的 Presenter 时,应用程序崩溃了。
现在最有趣的部分让我发疯了:所有可访问的类,不会带来任何问题,都是通过构造函数注入来注入的。
但是使用field injection注入的 Presenter 实例在需要时不会被初始化。
当然,我尝试不使用 lateinit 修饰符,并像使用 @JvmField 或没有它的可空字段一样注入它:结果是相同的 - 它根本没有注入。
由于问题与 相关Activity
,我有“自然约束”不使用主构造函数进行注入。
这是一个例外,除了第一个字符串外,它对我的信息量不是很大:
这是一些代码:
应用程序:
应用组件:
应用模块:
基本活动模块:
目前我有一个广泛分支的 MVP 模型,所以每个活动/片段都有 1 个视图模块和 1 个演示器模块,所有常见的注入都通过基类进行交互。这是活动 DI 部分的示例:
基本活动:
使用构造函数注入的示例 - MainPresenter(所有注入都有效 - 这里没有问题):
下面是所有“魔法”开始的地方——var presenter
在任何情况下都不会初始化。
但是,如前所述, KitKat上不会发生这种情况- 应用程序正在其上运行,没有任何问题。所以,再一次:我认为当应用程序在Marshmallow+上运行时存在问题(不幸的是,还不知道 Lollipop)。
我真的想知道以前是否有经验丰富的人遇到过这样的问题。没有构建错误,完全没有 dagger 异常;只是未初始化的属性。
它可能与某种方式的许可有关吗?我拥有的唯一危险许可是设备的位置访问权限,并且已经过持有和测试。
毕竟,如果存在支持/版本控制问题的可能性,它可能与其他方面有关吗?
提前致谢。
升级版:
似乎演示者实例被绑定到Activity
它之后onCreate()
,但是当触发一些回调操作时,活动作为侦听器的角色被取消绑定。因此,看起来 Kotlin 再次查找 Presenter,但发现它未初始化。仍然不明白为什么这只发生在较新的平台上。
android - 创建 XML 文件时出现 Kapt 异常
我在 Android Studio 上的 Kotlin 工作。
该项目编译并完美运行,但是当我尝试创建一个新的 XML 文件时,我不断收到一个 kapt 异常“注释处理时异常”。
我尝试通过右键单击 res 文件夹 -> 新建 -> 布局资源文件来创建 XML 文件,我还尝试通过右键单击 res 文件夹 -> 新建 -> XML -> 布局 XML 文件。
这是我的完整项目 gradle :
这是我的完整应用程序 gradle:
我尽力了,我在互联网上搜索以解决这个错误。所以我的问题是:如何安全地创建 XML 文件而不会出现此错误?或者,如果这是不可能的,我该如何解决这个 Kapt 异常?
谢谢
unit-testing - 如何包含注释处理器生成的代码来测试 Java/Kotlin 中的类路径
我有一个 Android 项目正在从 Java 迁移到 Kotlin。在这个项目中,我有一个纯 Kotlin 模块,我在其中使用以下 build.gradle 实现 API 客户端:
单元测试有一个注释处理器依赖项:
我可以在 build/generated/source/kapt/test 目录下看到生成的源,但它们对测试源不可见,即无法导入生成的 DaggerUnitTestComponent 以注入依赖项,例如。而且我很难完成它。
借助此 StackOverflow 答案和添加到 build.gradle 的以下代码段,我已经在 Android 项目上成功完成了这种事情,但对于纯 Kotlin/Java 项目,它不适用。
可以说我使用的是 Android Studio 3.0.1 和 Kotlin 1.2.10。Kotlin 库模块的来源位于 src/main/java 和 src/test/java。
maven - 如何使用 maven kapt 设置参数
如何在maven中设置kotlin-maven-plugin
?这是gradle脚本:
谢谢!
dagger-2 - 处理 dagger2 代码时出现 kapt 错误
在 ClientModule.kt
在 AppModule.kt 中
错误消息是:
太奇怪了,生成的 java 文件将我的函数签名从 List<Interceptor> 更改为 List
以下是生成的文件:
如何阻止 kapt 更改我的函数签名?
java - 找不到字段的吸气剂
我正在尝试使用两个模块构建一个 Android 应用程序项目,其中一个包含 Kotlin 代码。我在构建时收到以下错误,我不知道如何修复它。
警告和错误(粗体):
这是相关的类文件:
C:\android_workspace\anapp_android\VideoApp\core\build\tmp\kapt3\stubs\debug\co\acompany\videoapp\db\model\DbChannelDetails.java:
android - Android 支持库 Bump 27.1.0 由于“kapt”而无法编译
我正在尝试将我的 Android 应用程序的支持库依赖项从 27.0.2 升级到 27.1.0。这样做并尝试组装应用程序时,编译失败。
对于我正在使用的 kotlin 数据绑定:kapt "com.android.databinding:compiler:3.0.1"
对于我正在使用的科特林:implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.30"
这是尝试编译时产生的堆栈跟踪
我认为问题出在 kotlin 上,考虑到编译异常被捕获在KaptTask.kt:124
. 但是我无法确定我的应用程序需要更改哪些内容才能成功编译。
任何帮助是极大的赞赏!提前致谢。
java - IntelliJ 未获取多模块项目中的 Spring 配置元数据
我有以下多模块布局:
该库包含@ConfigurationProperties
并依赖于生成spring-configuration-metadata.json
文件所需的东西。所有这一切都完美无缺。该应用程序依赖于库,它可以在其中找到类,使用 Spring 自动装配,......好吧,一切正常。
但是,IntelliJ 不会spring-configuration-metadata.json
从库中提取文件,因此无法识别application.yml
应用程序文件中的这些选项。
如何让 IntelliJ 知道
spring-configuration-metadata.yml
它应该加载的其他文件?