【问题标题】:Kotlin's kapt plugin for gradle does not work for custom source set (JMH)Kotlin 的 gradle 的 kapt 插件不适用于自定义源集 (JMH)
【发布时间】:2017-07-13 15:58:37
【问题描述】:

有一个带有 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

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

【问题讨论】:

  • 它看起来不像 jmh 或 gradle 的问题(我在基于 java 的基于 gradle 的项目中使用了 jmh,并为 jmh 基准测试提供了自定义源集,没有任何问题)。 kotlin 也不是问题,因为将基于 kotlin 的基准测试放入默认源集中是可行的。因此,这看起来像是 kotlin-kapt 中的一个错误,您应该将其报告给 JetBrains。

标签: gradle kotlin jmh kapt


【解决方案1】:

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

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

为我解决了这个问题。

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

Couldn't find method jmhCapt

【讨论】:

  • 非常感谢您解决了这个难题!
猜你喜欢
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
相关资源
最近更新 更多