【问题标题】:Gradle Docker Download DependenciesGradle Docker 下载依赖项
【发布时间】: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 依赖项。

【问题讨论】:

标签: docker gradle gradle-dependencies


【解决方案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"

对我来说这似乎很愚蠢,但至少现在可以。

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2023-04-08
    • 2014-11-10
    • 2016-11-23
    • 2016-09-13
    • 2020-07-04
    • 2020-10-09
    • 2014-04-05
    • 2016-08-18
    相关资源
    最近更新 更多