在gradle引导期间使用在gradle清理期间下载的依赖项

时间:2018-09-25 14:10:37

标签: java docker spring-boot gradle dockerfile

我目前正在通过Dockerfile运行gradle项目。我要求构建在具有Internet连接的开发服务器上进行,而docker映像要部署在没有Internet连接的生产服务器上。为此,我试图在gradle-clean期间获取所有依赖项。但是,当我运行docker映像时,它再次尝试从存储库中下载所有依赖的jar。我如何使其指向仅在gradle-clean期间创建的缓存。 我是Docker框架的新手,感谢您的帮助。 谢谢。

Dockerfile如下:

FROM openjdk:8

RUN mkdir -p /home/pma
WORKDIR /home/pma

VOLUME ["/home/pma"]
VOLUME ["/root/.gradle/caches/"]

#Setup gradle in the docker image and configure path variables
RUN \ 
    cd /usr/local && \
    curl -L https://services.gradle.org/distributions/gradle-4.2.1-bin.zip -o gradle-4.2.1-bin.zip && \
    unzip gradle-4.2.1-bin.zip && \
    rm gradle-4.2.1-bin.zip
ENV GRADLE_HOME=/usr/local/gradle-4.2.1
ENV PATH=$GRADLE_HOME/bin:$PATH

#Add the base code to the docker image
ADD . /home/pma/

#Here I am trying to download all dependencies which will be pushed to /root/.gradle/caches/
RUN ["gradle","--stacktrace","clean"]

#to be executed during the container creation phase
CMD ["gradle","--stacktrace","bootRun"]

1 个答案:

答案 0 :(得分:1)

我希望构建一个完整的docker映像并将其投入生产。

如果只想使用缓存的依赖项,则在调用gradle任务时使用--offline

Gradle仅在执行任务时解决所需配置的依赖关系,例如如果不调用编译任务或基于compile配置及其依赖关系的其他任务,就无法解决compile依赖关系。

您可以编写一个遍历所有配置并解决依赖关系的自定义任务。

好像其他人以前遇到过此问题:Gradle Task to Resolve All Configured Dependencies

这是几年前他在做的事情(我自己没有测试过):

task resolveDependencies {
    doLast {
        project.rootProject.allprojects.each { subProject ->
            subProject.buildscript.configurations.each { configuration ->
                configuration.resolve()
            }
            subProject.configurations.each { configuration ->
                configuration.resolve()
            }
        }
    }
}