刚刚完成了我的“杰作”。没有 uber-jars,没有插件,代码库与 main 和 test 分离,基准编译与 main 挂钩,但不会在主流生命周期中自动运行。简单、明确、可破解的香草 gradle。
我直接从 IntelliJ 运行它,在你可能需要 uber-jar 的盒子上运行 :-)
在这样做之前,我花了相当多的时间试图让那个插件工作,但它对我的口味来说太笨重了。
下面分步分解。
定义一个新的sourceSet
被调用jmh
的类路径,该类路径与主路径挂钩sourceSet
sourceSets {
jmh {
java.srcDirs = ['src/jmh/java']
scala.srcDirs = ['src/jmh/scala']
resources.srcDirs = ['src/jmh/resources']
compileClasspath += sourceSets.main.runtimeClasspath
}
}
为其定义依赖项(至少为 JMH 及其注释处理器)。
dependencies {
...
jmhImplementation 'org.openjdk.jmh:jmh-core:1.21'
jmhImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.21'
}
定义任务jmh
类型JavaExec
task jmh(type: JavaExec, dependsOn: jmhClasses) {
main = 'org.openjdk.jmh.Main'
classpath = sourceSets.jmh.compileClasspath + sourceSets.jmh.runtimeClasspath
}
挂钩jmhClasses
任务以classes
确保基准与其余代码一起编译后运行
classes.finalizedBy(jmhClasses)