是否可能仅使用build.gradle
文件下载gradle依赖项?
我的目标是以下内容:
我有一组单元测试,我想在Docker容器中执行它们(作为CI过程的一部分)。最初,我使用来自docker hub的openjdk:8-jdk映像作为我的测试基础映像。因此,docker compose文件包含以下内容:
version: '3.2'
services:
unit:
image: openjdk:8-jdk
volumes:
- ..:/usr/test
working_dir: /usr/test
command: sh -c "exec ./gradlew junitPlatformTest -Punit -p moduleA/"
整个项目都安装在容器内的
/usr/test
目录上。当容器启动时,它会针对moduleA
执行junitPlatformTest
任务。使用openjdk:8-jdk
镜像的问题是每次运行unit
服务时都会下载Gradle及其依赖项。为了解决这个问题,我决定创建一个新的镜像,其中包含已下载Gradle和项目依赖项。以下是
Dockerfile
的代码:FROM openjdk:8-jdk
COPY . /usr/test
WORKDIR /usr/test
RUN apt-get -y install wget unzip
RUN wget https://services.gradle.org/distributions/gradle-4.1-bin.zip
RUN mkdir /opt/gradle
RUN unzip -d /opt/gradle gradle-4.1-bin.zip
RUN /opt/gradle/gradle-4.1/bin/gradle dependencies
build.gradle
文件位于与Dockerfile相同的文件夹中,因此命令COPY . /usr/test
会将其复制到工作目录中。
然而,执行gradle dependencies
命令不会下载库。在构建完镜像后,运行容器并进入其中(使用docker exec),似乎~/.gradle/caches/modules-2/files-2.1/
目录只包含pom文件,而不是jar文件。
我不确定gradle dependencies
是否是正确的命令。有什么建议吗?
编辑 - Gradle文件
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
jcenter()
}
ext.versions = new Properties()
file("./versions.properties").withInputStream {
stream -> ext.versions.load(stream)
}
dependencies {
testCompile("org.junit.jupiter:junit-jupiter-api:$versions.junitJupiterVersion")
testCompile("org.junit.jupiter:junit-jupiter-engine:$versions.junitJupiterVersion")
testCompile("org.junit.jupiter:junit-jupiter-params:$versions.junitJupiterVersion")
testCompile("org.mockito:mockito-core:'$versions.mockitoCore")
testCompile("org.junit.platform:junit-platform-launcher:1.0.0-RC3")
compile("com.google.inject:guice:$versions.guice")
....
}