Gradle:指定最终的spring-boot jar文件的正确方法是什么?

时间:2017-12-18 02:04:54

标签: docker spring-boot gradle

我的spring-boot应用程序最初是用maven构建的,但我正在尝试使用它。我的构建过程的一部分是使用dockerfile-maven插件制作一个docker镜像。最接受的gradle等价似乎是com.palantir.docker,所以我正在使用它(至少根据this tutorial from pivotal。)

我的设置非常简单。我的dockerfile接受一个构建参数,这是最后一个jar,并将其添加到图像中。

FROM openjdk:8-jdk-alpine
MAINTAINER github.com/paul-nelson-baker
EXPOSE 5005 8080 35729
ENTRYPOINT ["java", "-Xdebug", "-Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n", "-jar", "/var/paulbaker/pauls-blog.jar"]
ARG JAR_FILE
ADD ${JAR_FILE} "/var/paulbaker/pauls-blog.jar"

让我感到困惑的部分是gradle设置。我传递的构建arg看起来是正确的:

docker {
    name = "paulbaker.io/my-blog"
    tags 'latest'
    dockerfile file('src/main/docker/Dockerfile')
    files "${project.name}-${version}.jar"
    buildArgs([JAR_FILE: "${project.name}-${version}.jar"])
}

但是每当我尝试构建映像时,即使实际的java构建成功,我也会收到以下错误:

$ gradle build docker

> Task :docker FAILED
ADD failed: stat /var/lib/docker/tmp/docker-builder952857277/pauls-blog-0.0.1-SNAPSHOT.jar: no such file or directory

我尝试了无数组合来尝试指定./build/libs/pauls-blog-0.0.1-SNAPSHOT.jar的路径(相对于我的项目),我可以看到它存在,而上面的打印目录却没有。

显然我不了解gradle构建,有人可以清楚如何获取最终的jar文件吗?

3 个答案:

答案 0 :(得分:1)

以下错误:

> Task :docker FAILED
ADD failed: stat /var/lib/docker/tmp/docker-builder952857277/pauls-blog-0.0.1-SNAPSHOT.jar: no such file or directory
当Palantir Docker插件找不到使用docker.files属性指定的文件时,会发生

当前上下文目录。

在您的问题中,插件正在项目的根目录中搜索jar文件(可能是您的build.gradle所在的位置)并且因为没有在那里生成jar文件而失败。当您指定jar.archivePath时,您指定了jar文件路径的完整位置,现在显然可以找到它。

答案 1 :(得分:0)

我已经解决了这个问题,但我不知道为什么会有这个问题,所以我打开了这个问题所以有人有机会详细解释为什么会这样

正确的值应引用jar.archivePath。 所以最终结果如下:

docker {
    name = "paulbaker.io/my-blog"
    tags 'latest'
    dockerfile file('src/main/docker/Dockerfile')
    files jar.archivePath
    buildArgs([JAR_FILE: "${jar.archiveName}"])
}

答案 2 :(得分:0)

files的参数已添加到docker任务的gradle CopySpec中。

因此files jar.archivePath将创建jar构建工件的路径添加到此 CopySpec

处理完 Dockerfile 后,jar.archiveName将插入到ADD模板中,并且因为您的jar.archivePath CopySpec docker构建上下文,它会在 CopySpec 中找到jar.archiveName,并将文件复制到ADD的目的地。

这是我在自己的测试中看到的内容。