仅下载 build.gradle 文件的依赖项

cha*_*sos 5 java gradle docker docker-compose

是否可以仅使用文件下载 gradle 依赖项build.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/"
Run Code Online (Sandbox Code Playgroud)

整个项目安装在/usr/test容器内的目录中。当容器启动时,它会junitPlatformTest针对 执行任务moduleA。图像的问题openjdk:8-jdk是每次运行服务时都会下载 gradle 及其依赖项unit

为了解决这个问题,我决定创建一个新映像,其中已下载 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
Run Code Online (Sandbox Code Playgroud)

build.gradle文件与 Dockerfile 位于同一文件夹中,因此该命令COPY . /usr/test将其复制到工作目录中。

但是,执行该gradle dependencies命令不会下载库。构建镜像后,运行一个容器并进入其中(使用 docker exec),该~/.gradle/caches/modules-2/files-2.1/目录似乎只包含 pom 文件,而不包含 jar。

我不使用 ifgradle 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")
    ....
}
Run Code Online (Sandbox Code Playgroud)

Tar*_*ani 3

将以下内容添加到您的 gradle 文件中

 task download (type: Exec) {
     configurations.testCompile.files
     commandLine 'echo', 'Downloaded all dependencies'

  }
Run Code Online (Sandbox Code Playgroud)

也改变

RUN /opt/gradle/gradle-4.1/bin/gradle dependencies
Run Code Online (Sandbox Code Playgroud)

RUN /opt/gradle/gradle-4.1/bin/gradle
Run Code Online (Sandbox Code Playgroud)

~/.gradle这将在您运行 gradle 命令时缓存所有依赖项。它也会下载 jars,而不仅仅是 poms。如果你想进一步缓存,你甚至可以使用 gradle 文件夹的命名卷

version: '3.2'

services:

  unit:
    image: openjdk:8-jdk
    volumes:
      - ..:/usr/test
      - gradlecache:/root/.gradle/
    working_dir: /usr/test
    command: sh -c "exec ./gradlew junitPlatformTest -Punit -p moduleA/"
volumes:
  gradlecache: {}
Run Code Online (Sandbox Code Playgroud)