【发布时间】:2023-03-15 16:05:01
【问题描述】:
我有一个 Java Gradle Dockerfile,它设置 Gradle Wrapper、复制源文件、创建一个 Jarfile 并运行它:
FROM anapsix/alpine-java:9_jdk
WORKDIR /app
# Prepare Gradle
COPY build.gradle .
COPY gradle/wrapper/gradle-wrapper.jar ./gradle/wrapper/gradle-wrapper.jar
COPY gradle/wrapper/gradle-wrapper.properties ./gradle/wrapper/gradle-wrapper.properties
COPY gradlew .
RUN sh -c "./gradlew"
# Download depencencies here?
COPY . .
# Create Jar
RUN sh -c "./gradlew jar"
EXPOSE 7000
# Run Jar
CMD [ \
"java", \
"-jar", "./build/libs/projectname.jar" \
]
这工作正常,但是因为 jar 步骤是下载依赖项的第一阶段,每次我修改源代码时都需要重新下载所有依赖项。这使得构建周期比它需要的慢很多。
我想指示 gradle 在复制源文件之前的一个步骤中下载 build.gradle 文件中指定的依赖项。
我尝试在复制源代码之前简单地调用RUN sh -c "./gradlew compileJava",但 gradle 很“聪明”并说没有工作要做,而包含单个文件实际上会下载依赖项。
有没有办法像 build.gradle 中指定的那样简单地指示 Gradle 下载依赖项?或者最好的解决方法是什么?
编辑:我不是在问如何使用 Gradle 缓存,而是在问如何利用 docker 层来存储 gradle 依赖项。
【问题讨论】:
-
您可以使用自定义任务来完成,如下所示:stackoverflow.com/a/33542886/750510
标签: docker gradle gradle-dependencies