Kotlin用于gradle的kapt插件不适用于自定义源集(JMH)

问题描述 投票:2回答:1

使用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

知道如何解决问题吗?

gradle kotlin jmh kapt
1个回答
4
投票

kapt在此上下文中定义了主要源集的kapt配置的依赖关系,就像compileruntime一样。

dependencies {
  kaptJmh 'org.openjdk.jmh:jmh-generator-annprocess:1.18'
}

为我解决了这个问题。

我期望它与jmhKapt类比为jmhCompile,但这会产生

Couldn't find method jmhCapt
© www.soinside.com 2019 - 2024. All rights reserved.