Gradle 4.0-milestone2 的集成测试

Integration test on Gradle 4.0-milestone2

我正在将 Java 库迁移到 Gradle 4.0-milestone2,我在下面定义的集成任务中遇到了一些问题。

这个任务允许我有两个不同的源目录 src/testsrc/integration 并且有单独的 gradle 任务到 运行 它们,./gradlew test./gradlew integration.

integration.gradle

的内容
sourceSets {
  integration {
    java {
      compileClasspath += main.output + test.output
      runtimeClasspath += main.output + test.output
      srcDir file('src/integration/java')
    }
    resources.srcDir file('src/integration/resources')
  }
}
configurations {
  integrationCompile.extendsFrom testCompile
  integrationRuntime.extendsFrom testRuntime
}
idea {
  module {
    testSourceDirs += file('src/integration/java')
    scopes.TEST.plus += [configurations.integrationCompile]
  }
}
task integration(type: Test) {
  testClassesDir = sourceSets.integration.output.classesDir
  classpath = sourceSets.integration.runtimeClasspath
}

integration.mustRunAfter test

build.gradle

的内容
apply plugin: 'java-library'
apply plugin: 'idea'

apply from: './integration.gradle'

targetCompatibility = '1.7'
sourceCompatibility = '1.7'

dependencies {

  api 'com.github.ihsanbal:LoggingInterceptor:2.0.0'
  api 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
  api 'com.squareup.retrofit2:retrofit:2.0.2'
  api 'com.squareup.retrofit2:converter-gson:2.0.2'
  api 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

  testImplementation 'junit:junit:4.12'
}

test {
  testLogging.showStandardStreams = true
}


task copyTestResources(type: Copy) {
  from sourceSets.test.resources
  into sourceSets.test.output.classesDir
}
processTestResources.dependsOn copyTestResources

这个配置有两个问题。

1) copyTestResources 任务不起作用,因为 classesDir 已弃用且 classesDirs 不兼容。

2) 类路径不包括库依赖项。 编译失败充满以下错误

error: cannot find symbol
error: package SOMETHING does not exist

关于如何解决这个问题的任何线索?谢谢

经过一段时间 tips on the Gradle forum,我开始工作了。

build.gradle

apply plugin: 'java-library'
apply plugin: 'idea'

apply from: './integration.gradle'

targetCompatibility = '1.7'
sourceCompatibility = '1.7'

dependencies {

  api 'com.github.ihsanbal:LoggingInterceptor:2.0.0'
  api 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
  api 'com.squareup.retrofit2:retrofit:2.0.2'
  api 'com.squareup.retrofit2:converter-gson:2.0.2'
  api 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

  testImplementation 'junit:junit:4.12'
}
test {
  testLogging.showStandardStreams = true
}

integration.gradle

sourceSets {
  integration {
    java {
      compileClasspath += main.output + test.output
      runtimeClasspath += main.output + test.output
      srcDir file('src/integration/java')

      integration.runtimeClasspath += integration.output
    }
    resources.srcDir file('src/integration/resources')
  }
}
configurations {
  integrationImplementation.extendsFrom testImplementation
  integrationRuntimeOnly.extendsFrom testRuntimeOnly
}
idea {
  module {
    testSourceDirs += file('src/integration/java')
    scopes.TEST.plus += [configurations.integrationRuntimeClasspath, configurations.integrationCompileClasspath]
  }
}
task integration(type: Test) {
  testClassesDirs += sourceSets.integration.output.classesDirs
  classpath = sourceSets.integration.runtimeClasspath
}
integration.mustRunAfter test

仍然需要弄清楚如何从 IDE 中 运行 它们,因为它目前无法正常工作,但至少我可以再次 CI。