当前位置: 首页 > 知识库问答 >
问题:

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

姚伟
2023-03-14

具有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

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

共有1个答案

广楚
2023-03-14

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

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

为我解决了这个问题。

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

Couldn't find method jmhCapt
 类似资料:
  • 我想将我的基于vertx的项目移到https://github.com/sczyh30/vertx-blueprint-microservice.git模板。blueprint项目使用annotations@vertxgen等在编译期间生成代码。

  • 我的项目是使用Gradle与Kotlin DSL进行构建。我现在要添加一个用于测试的自定义源集。有关守则如下: 有没有使用Kotlin DSL声明自定义源集并将其标记为测试模块的经验? 编辑:我现在使用Groovy创建了一个示例Gradle项目,使用下面的代码(我猜这只是我上面语句的Groovy版本),它工作起来没有问题: 因此,要么是我对Kotlin DSL的转换错误,要么是Intellij端的

  • 我正在使用私有Maven存储库的有限开发环境中工作。里面有一个Gradle插件,我正在尝试使用它。然而,我认为它没有遵循Gradle插件的预期命名和目录结构,所以当我使用PluginDSL时,我的构建失败了。在Maven存储库中,插件的结构如下: 当我使用以下定义使用 Gradle 插件 DSL 引用此插件时: 我的构建版本出现错误,抱怨它找不到.plugin但是,似乎没有通过插件DSL来指示插件

  • 我正在为我的项目设置Jacoco Gradle插件。该插件执行良好,并生成覆盖报告,但它不排除我将排除的包。 我想包含的类在com/xxx/ws/hn/**中,我想排除的类在com/xxx/ws/企业/**中。 这是我的Gradle脚本: 我有什么遗漏吗?我尝试过各种排除模式,包括“.”包的分隔符,而不是“/”,但似乎没有任何效果。任何帮助都将不胜感激。

  • 我为gradle创建了一个简单的基于groovy的插件。 在我的毕业典礼上。构建文件我有以下内容: 一切都很好,我得到了一个构建目录和一个. jar在lib文件夹中生成,我想这是独立的插件。 现在我想知道如何将这个新插件注册到我的gradle安装中,这样我就可以应用插件了:“myPlugin”我做了以下工作: 将插件放入安装中的插件文件夹 创建了myplugin.properties文件并将其包含

  • 我在Project中创建了一个简单的gradle插件。根据文档,它应该是好的,但当我尝试使用它时,我发现id为'show-date-plugin'的文档我指的是:https://docs.gradle.org/current/userguide/custom_plugins.html 您可以将插件的源代码放在rootprojectdir/buildsrc/src/main/groovy目录中。Gr