【发布时间】:2016-06-24 03:49:39
【问题描述】:
我正在尝试创建一个 Gradle 任务,该任务将运行干净、构建,然后从 bmuschko/gradle-docker-plugin 插件运行 buildDockerImage 任务。我可以在命令行中的单独命令中成功运行 clean 任务、构建任务和 buildDockerImage 任务,但是当我尝试创建一个执行所有三个任务的单一任务时,我得到一个错误:
.../config-server/build/docker/state/DockerBuildImage_Decorated (No such file or directory)
看起来 gradle-docker-plugin 正在尝试将某种日志文件添加到 /build/docker/state 目录,但是当我在单个任务中运行 clean、build 和 buildDockerImage 时,该目录不存在。但是,当我在 CLI 中将这些作为单独的命令运行时,该目录存在。
这可行
如果我不尝试清理...它可以正常工作并创建 docker 映像:
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
task buildDockerImage(type: DockerBuildImage) {
doFirst {
copy {
from 'src/main/resources/docker/Dockerfile'
into 'build/libs'
}
}
inputDir = project.file('build/libs')
tag = alexFabian + "/" + jar.baseName
}
task myBuildDockerImage(type: Task, dependsOn: ['build' ,'buildDockerImage']) {
buildDockerImage.mustRunAfter build
}
我的构建目录如下所示:
/classes
/dependency-cache
/docker
/libs
/reports
/resources
/test-results
/tmp
这失败了
但是当我添加对“干净”任务的依赖时... buildDockerImage 任务失败,因为它找不到 /build/docker 目录
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
task buildDockerImage(type: DockerBuildImage) {
doFirst {
copy {
from 'src/main/resources/docker/Dockerfile'
into 'build/libs'
}
}
inputDir = project.file('build/libs')
tag = afabian + "/" + jar.baseName
}
task myBuildDockerImage(type: Task, dependsOn: ['clean', 'build' ,'buildDockerImage']) {
build.mustRunAfter clean
buildDockerImage.mustRunAfter build
}
现在我的 build/ 目录看起来像这样(缺少 /docker 目录):
/classes
/dependency-cache
/libs
/reports
/resources
/test-results
/tmp
我得到了这个错误:
Execution failed for task ':buildDockerImage'.
> .../config-server/build/docker/state/DockerBuildImage_Decorated (No such file or directory)
我过去使用过 Maven,并且对 Gradle 很陌生,因此我目前的理解有限。
- 使用 gradle(包装器):2.11
- 使用 gradle-docker-plugin : com.bmuschko:gradle-docker-plugin:2.6.6
感谢任何帮助!
【问题讨论】:
-
为什么你的任务中有
doFirst? -
推测:也许您的
copy部分在清理任务之前执行?尝试从复制部分删除doFirst。 -
好主意@RaGe。我尝试删除
doFirst,但构建失败,我得到一个Directory .../build/docker specified for property 'inputDir' does not exist.,所以我假设在没有do的情况下,inputDir行在复制完成之前被执行。
标签: java gradle docker build.gradle gradle-plugin