Gradle Docker 下载依赖项
Posted
技术标签:
【中文标题】Gradle Docker 下载依赖项【英文标题】:Gradle Docker Download Dependencies 【发布时间】:2019-05-22 01:34:18 【问题描述】:我有一个 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 依赖项。
【问题讨论】:
Docker cache gradle dependencies的可能重复 您可以使用自定义任务来完成,如下所示:***.com/a/33542886/750510 【参考方案1】:一种解决方法是创建一个虚拟 java 文件并调用 compileJava
下载依赖项:
# Trick to get Gradle to download dependencies
RUN mkdir -p /app/src/main/java
RUN sh -c "echo 'public class Dummy ' > /app/src/main/java/Dummy.java && ./gradlew compileJava"
对我来说这似乎很愚蠢,但至少现在可以。
【讨论】:
以上是关于Gradle Docker 下载依赖项的主要内容,如果未能解决你的问题,请参考以下文章