科特林';gradle的s kapt插件不适用于自定义源代码集(JMH)

科特林';gradle的s kapt插件不适用于自定义源代码集(JMH),gradle,kotlin,jmh,kapt,Gradle,Kotlin,Jmh,Kapt,具有Gradle设置的Kotlin项目: apply plugin: 'kotlin' apply plugin: 'kotlin-kapt' dependencies { kapt 'org.openjdk.jmh:jmh-generator-annprocess:1.18' ... } 将基准点置于src/main/kotlin下不会出现问题 但当我为JMH添加自定义源集时: sourceSets { jmh { compileClasspath

具有Gradle设置的Kotlin项目:

apply plugin: 'kotlin'
apply plugin: 'kotlin-kapt'

dependencies {
    kapt 'org.openjdk.jmh:jmh-generator-annprocess:1.18'
    ...
}
将基准点置于src/main/kotlin下不会出现问题

但当我为JMH添加自定义源集时:

sourceSets {
    jmh {
        compileClasspath += sourceSets.test.runtimeClasspath
        runtimeClasspath += sourceSets.test.runtimeClasspath
    }
}
并将基准从src/main/kotlin移动到src/jmh/kotlin,执行基准失败:

Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList
    at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)
    at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:122)
    at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:256)
    at org.openjdk.jmh.runner.Runner.run(Runner.java:206)
    at org.openjdk.jmh.Main.main(Main.java:71)
看起来kaptJmhKotlin什么都没做:

kaptGenerateStubsJmhKotlin UP-TO-DATE
Skipping task ':kaptJmhKotlin' as it has no source files and no previous output files.
:kaptJmhKotlin NO-SOURCE
:compileJmhKotlin

知道如何解决这个问题吗?

kapt
在本文中定义了主源集的
kapt
配置的依赖关系,就像
编译
运行时
一样

dependencies {
  kaptJmh 'org.openjdk.jmh:jmh-generator-annprocess:1.18'
}
为我解决了这个问题

jmhcomfile
类似,我希望它是
jmhKapt
,但这会产生

Couldn't find method jmhCapt

jmh或gradle看起来没有问题(我在基于java的gradle项目中使用了jmh,并为jmh基准测试提供了自定义源集,没有任何问题)。kotlin也没有问题,因为将基于kotlin的基准放在默认源集中是可行的。所以,看起来像是kotlin kapt中的一个bug,你应该向JetBrains报告。非常感谢你解决了这个难题!