我目前正在通过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"]
答案 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()
}
}
}
}