2017-07-13 1 views
2

Avoir un projet Kotlin avec l'installation Gradle:plugin KAPT de Kotlin pour gradle ne fonctionne pas pour voir la source personnalisée (JMH)

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

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

benchmarks Putting sous src/main/Kotlin travaux sans problèmes.

Mais quand j'ajoute une source définie pour JMH personnalisée:

sourceSets { 
    jmh { 
     compileClasspath += sourceSets.test.runtimeClasspath 
     runtimeClasspath += sourceSets.test.runtimeClasspath 
    } 
} 

et déplacer les repères de src/main/Kotlin-src/JMH/Kotlin, l'exécution des points de référence échoue avec:

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) 

On dirait que kaptJmhKotlin ne fait rien:

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

Une idée de comment résoudre le problème?

+1

Il ne ressemble pas à un problème avec JMH ou gradle (j'ai utilisé JMH dans des projets Gradle-basés sur Java avec un ensemble de sources personnalisées pour les benchmarks jmh sans aucun problème). Ce n'est pas non plus un problème avec kotlin, en plaçant des benchmarks basés sur kotlin dans les worksets par défaut. Donc, ressemble à un bug dans kotlin-kapt et vous devriez le signaler à JetBrains. –

Répondre

2

kapt dans ce contexte définit une dépendance pour la configuration de kapt principale source mis, tout comme compile et runtime faire.

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

résout le problème pour moi.

Je pensais que ce serait jmhKapt par analogie avec jmhCompile, mais ce produit

Couldn't find method jmhCapt 
+0

Merci beaucoup d'avoir résolu ce puzzle! – oae