运行 Gradle integrationTest Task with Docker 时如何修复':integrationTest NO-SOURCE'
How to fix ':integrationTest NO-SOURCE' when running Gradle integrationTest Task with Docker
我有一些用 Spring Boot 编写的集成测试,并希望 运行 按需进行。不是在做 ./gradlew build 但我想 运行 他们 ./gradlew integrationTest.
我想运行这个integrationTest任务在Docker容器
中
我已将集成测试代码放入文件夹 src/integrationtest 并创建了 integration-test.gradle文件如下: [我正在使用 Gradle 5.2]
sourceSets {
integrationTest {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
resources.srcDir file('src/integrationtest/resources')
}
}
configurations {
integrationTestImplementation.extendsFrom testImplementation
integrationTestRuntimeOnly.extendsFrom testRuntimeOnly
integrationTestAnnotationProcessor.extendsFrom testAnnotationProcessor
}
idea {
module {
testSourceDirs += sourceSets.integrationTest.java.srcDirs
testResourceDirs += sourceSets.integrationTest.resources.srcDirs
scopes.TEST.plus += [configurations.integrationTestCompile]
}
}
task integrationTest(type: Test) {
description = 'Runs the integration tests.'
group = 'verification'
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
outputs.upToDateWhen { false }
shouldRunAfter test
}
check.dependsOn -= integrationTest
并将此应用到我的 build.gradle apply from: 'gradle/integration-test.gradle'
我创建了这个 docker 文件并将其命名为 Dockerfile.it:
FROM openjdk:8u191-jdk-alpine as build
ENV APP_WORKSPACE=/workspace/app/
WORKDIR $APP_WORKSPACE
COPY gradlew .
COPY gradle gradle
COPY build.gradle settings.gradle $APP_WORKSPACE
COPY lombok.config lombok.config
COPY src src
ENV GRADLE_OPTS -Dorg.gradle.daemon=false
ENV AWS_ACCESS_KEY_ID="aws-access-key-id"
ENV AWS_SECRET_ACCESS_KEY="aws-secret-access-key"
ENV AWS_REGION="us-west-2"
ENTRYPOINT ["./gradlew", "integrationTest"]
当我 运行 命令 ./gradlew integrationTest 直接在我的项目文件夹中的终端上时,一切正常,但是当我构建 Docker 图像和 运行 来自该图像的 Docker 容器,实际输出是:
Downloading https://services.gradle.org/distributions/gradle-5.2-bin.zip
....................................................................................................................................................................................
Unzipping /root/.gradle/wrapper/dists/gradle-5.2-bin/2di47o96ob6dhysr22jutthm6/gradle-5.2-bin.zip to /root/.gradle/wrapper/dists/gradle-5.2-bin/2di47o96ob6dhysr22jutthm6
Set executable permissions for: /root/.gradle/wrapper/dists/gradle-5.2-bin/2di47o96ob6dhysr22jutthm6/gradle-5.2/bin/gradle
> Task :compileJava
> Task :processResources
> Task :classes
> Task :compileIntegrationTestJava NO-SOURCE
> Task :processIntegrationTestResources NO-SOURCE
> Task :integrationTestClasses UP-TO-DATE
> Task :integrationTest NO-SOURCE
BUILD SUCCESSFUL in 3m 54s
2 actionable tasks: 2 executed
这些行是我的问题:
Task :compileIntegrationTestJava NO-SOURCE
Task :processIntegrationTestResources NO-SOURCE
Task :integrationTestClasses UP-TO-DATE
Task :integrationTest NO-SOURCE
我错过了什么或做错了什么?
经过一番调查,我发现我做错了一件事,就是源文件文件夹的名称,我将其命名为 integrationtest 而不是 integrationTest 使 integration-test.gradle 文件中的配置正常工作!
我有一些用 Spring Boot 编写的集成测试,并希望 运行 按需进行。不是在做 ./gradlew build 但我想 运行 他们 ./gradlew integrationTest.
我想运行这个integrationTest任务在Docker容器
中我已将集成测试代码放入文件夹 src/integrationtest 并创建了 integration-test.gradle文件如下: [我正在使用 Gradle 5.2]
sourceSets {
integrationTest {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
resources.srcDir file('src/integrationtest/resources')
}
}
configurations {
integrationTestImplementation.extendsFrom testImplementation
integrationTestRuntimeOnly.extendsFrom testRuntimeOnly
integrationTestAnnotationProcessor.extendsFrom testAnnotationProcessor
}
idea {
module {
testSourceDirs += sourceSets.integrationTest.java.srcDirs
testResourceDirs += sourceSets.integrationTest.resources.srcDirs
scopes.TEST.plus += [configurations.integrationTestCompile]
}
}
task integrationTest(type: Test) {
description = 'Runs the integration tests.'
group = 'verification'
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
outputs.upToDateWhen { false }
shouldRunAfter test
}
check.dependsOn -= integrationTest
并将此应用到我的 build.gradle apply from: 'gradle/integration-test.gradle'
我创建了这个 docker 文件并将其命名为 Dockerfile.it:
FROM openjdk:8u191-jdk-alpine as build
ENV APP_WORKSPACE=/workspace/app/
WORKDIR $APP_WORKSPACE
COPY gradlew .
COPY gradle gradle
COPY build.gradle settings.gradle $APP_WORKSPACE
COPY lombok.config lombok.config
COPY src src
ENV GRADLE_OPTS -Dorg.gradle.daemon=false
ENV AWS_ACCESS_KEY_ID="aws-access-key-id"
ENV AWS_SECRET_ACCESS_KEY="aws-secret-access-key"
ENV AWS_REGION="us-west-2"
ENTRYPOINT ["./gradlew", "integrationTest"]
当我 运行 命令 ./gradlew integrationTest 直接在我的项目文件夹中的终端上时,一切正常,但是当我构建 Docker 图像和 运行 来自该图像的 Docker 容器,实际输出是:
Downloading https://services.gradle.org/distributions/gradle-5.2-bin.zip
....................................................................................................................................................................................
Unzipping /root/.gradle/wrapper/dists/gradle-5.2-bin/2di47o96ob6dhysr22jutthm6/gradle-5.2-bin.zip to /root/.gradle/wrapper/dists/gradle-5.2-bin/2di47o96ob6dhysr22jutthm6
Set executable permissions for: /root/.gradle/wrapper/dists/gradle-5.2-bin/2di47o96ob6dhysr22jutthm6/gradle-5.2/bin/gradle
> Task :compileJava
> Task :processResources
> Task :classes
> Task :compileIntegrationTestJava NO-SOURCE
> Task :processIntegrationTestResources NO-SOURCE
> Task :integrationTestClasses UP-TO-DATE
> Task :integrationTest NO-SOURCE
BUILD SUCCESSFUL in 3m 54s
2 actionable tasks: 2 executed
这些行是我的问题:
Task :compileIntegrationTestJava NO-SOURCE
Task :processIntegrationTestResources NO-SOURCE
Task :integrationTestClasses UP-TO-DATE
Task :integrationTest NO-SOURCE
我错过了什么或做错了什么?
经过一番调查,我发现我做错了一件事,就是源文件文件夹的名称,我将其命名为 integrationtest 而不是 integrationTest 使 integration-test.gradle 文件中的配置正常工作!