我有以下 Gradle (kotlin-dsl) 项目布局
工具根 |- 工具-ui // Reactjs |-tools-main // springboot
在创建
tool-ui/build
springboot jar 之前,需要将 tools-main/build/resources/main/static
目录复制到 tools-main
目录。创建以下任务和依赖项是为了在 tools-main/build.gradle.kts
中实现此目的
// Copy WebUI build to SpringBoot Jar
val copyWebUi = tasks.register<Copy>("copyWebUi") {
dependsOn(tasks.getByPath(":tools-ui:build"))
from(project(":tools-ui").layout.buildDirectory)
into(layout.buildDirectory.dir("resources/main/static/simconfig"))
}
tasks.getByName<BootJar>("bootJar") {
dependsOn(copyWebUi)
}
但是在构建过程中它会给出以下警告。
> 任务:tools-main:copyWebUi 由于以下原因,已禁用任务“:tools-main:copyWebUi”的执行优化以确保正确性: - Gradle 检测到以下位置存在问题:'C: ools-root ools-main uild esources\main\static\simconfig'。 原因:任务“:tools-main:bootJarMainClassName”使用任务“:tools-main:copyWebUi”的此输出,而没有声明显式或隐式依赖项。 这可能会导致产生不正确的结果,具体取决于任务的执行顺序。 有关此问题的更多详细信息,请参阅 https://docs.gradle.org/7.3.3/userguide/validation_problems.html#implicit_dependency。 > 任务:tools-main:bootJar > 任务:tools-main:inspectClassesForKotlinIC > 任务:tools-main:jar 由于以下原因,已禁用任务“:tools-main:jar”的执行优化以确保正确性: - Gradle 检测到以下位置存在问题:'C: ools-root ools-main uild 资源\主要'。 原因:任务“:tools-main:jar”使用任务“:tools-main:copyWebUi”的此输出,而没有声明显式或隐式依赖项。 这可能会导致产生不正确的结果,具体取决于任务的执行顺序。 有关此问题的更多详细信息,请参阅 https://docs.gradle.org/7.3.3/userguide/validation_problems.html#implicit_dependency。
如何解决这个错误?
我不确定我是否理解错误消息中提供的链接中的任何内容。
我找到了另一种方法来使用 Springboot gradle 插件的 BootJar 任务来解决此错误。
// Copy WebUI build to SpringBoot Jar
tasks.getByName<BootJar>("bootJar") {
dependsOn(":tools-ui:build")
from(project(":tools-ui").buildDir) {
into("BOOT-INF/classes/static/")
}
}
此任务配置将直接将UI构建文件复制到springboot应用程序jar中。并且这不会发出“隐式依赖项”警告。
在您的
build.gradle
文件中添加此地图功能
tasks.configureEach { if (it.getName() == 'bootJarMainClassName'){ 取决于('copyWebUi') } }
这个解决方案效率不高(因为它检查所有任务),但它对我来说很好用并且节省了我的时间。
您可以在这里阅读更多有关任务的内容https://docs.gradle.org/current/userguide/partr6_writing_tasks.html