kotlin - 如何为此 Gradle 任务制作插件?
问题描述
我的项目中有一些 Gradle 配置,它为集成测试创建了一个额外的源集,以及一个运行它们的任务:
sourceSets {
create("integrationTest") {
compileClasspath += sourceSets.main.get().compileClasspath + sourceSets.main.get().output
runtimeClasspath += sourceSets.main.get().runtimeClasspath
}
}
task("integrationTest", type = Test::class) {
testClassesDirs = sourceSets["integrationTest"].output.classesDirs
classpath = sourceSets["integrationTest"].runtimeClasspath
outputs.upToDateWhen { false }
}
tasks.withType<Test> {
useJUnitPlatform()
}
我正在将其转换为插件,因此我可以轻松地重用它:
class IntegrationTestPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.plugins.withType(JavaPlugin::class.java) {
val sourceSets = project.properties["sourceSets"] as SourceSetContainer
val sourceSet = sourceSets.create("integrationTest") {
val main = sourceSets.getByName("main")
compileClasspath += main.compileClasspath + main.output
runtimeClasspath += main.runtimeClasspath
}
project.tasks.create("integrationTest", Test::class.java) {
useJUnitPlatform()
testClassesDirs += sourceSet.output.classesDirs
classpath = sourceSet.runtimeClasspath
outputs.upToDateWhen { false }
}
}
}
}
问题是,当我integrationTest
从插件运行任务时,它也会尝试从test
源集运行测试,然后因为它们不在类路径上而失败。
如何修复插件,使其不会尝试这样做?
对于奖励积分:为什么插件的行为与原始代码不同?
解决方案
推荐阅读
- c# - 从 Azure 存储流式传输 blob 时如何设置编码
- javascript - JavaScript 中的 POSTFIX 和 PREFIX 递增/递减优先级
- cakephp - CakePHP 3 - 无法生成带有 WHERE...OR 条件的查询
- azure - 尝试使用 oAuth 和 REST 从 Microsoft 获取 Azure AD onPremisesSamAccountName
- java - 导入 Kafka MockAdminClient 以使用 maven 对我的 Kafka 应用程序进行单元测试
- sql - 需要从 xml 文件中读取内联查询并使用 Vb.net 执行
- r - 在 RStudio 版本 1.1.463 中安装 ggvegan 时遇到问题
- python - 如何使用 selenium python 在不和谐服务器中使滚动条向下滚动?
- r - 使用 dplyr 的描述性统计表中的长格式
- javascript - 如何在 Firebase 云功能中获取当前用户或登录用户?