如何添加一个新的sourceset到摇篮?(How do I add a new sourceset

2019-06-17 12:20发布

我想集成测试添加到我的摇篮版本(1.0版)。 他们应该因为他们需要被部署web应用程序到本地主机(他们测试Web应用程序)从我的正常测试单独运行。 测试应该能够使用我的主要来源集中定义的类。 如何做到这一点?

Answer 1:

这花了我一段时间才能找出和在线资源是不是很大。 所以我想我的文档解决方案。

这是一个具有intTest源除了主要和测试源集设置一个简单的gradle这个构建脚本:

apply plugin: "java"

sourceSets {
    // Note that just declaring this sourceset creates two configurations.
    intTest {
        java {
            compileClasspath += main.output
            runtimeClasspath += main.output
        }
    }
}

configurations {
    intTestCompile.extendsFrom testCompile
    intTestRuntime.extendsFrom testRuntime
}

task intTest(type:Test){
    description = "Run integration tests (located in src/intTest/...)."
    testClassesDir = project.sourceSets.intTest.output.classesDir
    classpath = project.sourceSets.intTest.runtimeClasspath
}


Answer 2:

这是我如何实现这一点没有使用configurations{ }

apply plugin: 'java'

sourceCompatibility = JavaVersion.VERSION_1_6

sourceSets {
    integrationTest {
        java {
            srcDir 'src/integrationtest/java'
        }
        resources {
            srcDir 'src/integrationtest/resources'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
    }
}

task integrationTest(type: Test) {
    description = "Runs Integration Tests"
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath += sourceSets.integrationTest.runtimeClasspath
}

经测试使用:1.4摇篮和摇篮1.6



Answer 3:

曾经在2016年写给摇篮2.X / 3.X和远远过时 ! 请看看在摇篮4,上了记录的解决方案


综上所述既古老答案(获得最佳的和最小的可行两全其美的):

一些温暖的话第一:

  1. 首先,我们需要定义sourceSet

     sourceSets { integrationTest } 
  2. 接下来我们扩大sourceSettest ,为此我们使用test.runtimeClasspath (包括从所有dependenciess testtest本身)的类路径派生sourceSet

     sourceSets { integrationTest { compileClasspath += sourceSets.test.runtimeClasspath runtimeClasspath += sourceSets.test.runtimeClasspath // ***) } } 
    • )不知何故此再次声明/延长sourceSets.integrationTest.runtimeClasspath是必要的,但应该是无关紧要的,因为runtimeClasspath总是扩展output + runtimeSourceSet ,不明白这一点
  3. 我们定义了一个专门的任务只是运行集成测试:

     task integrationTest(type: Test) { } 
  4. 配置integrationTest测试类和类路径中使用。 从默认java插件使用test sourceSet

     task integrationTest(type: Test) { testClassesDir = sourceSets.integrationTest.output.classesDir classpath = sourceSets.integrationTest.runtimeClasspath } 
  5. 测试(可选)自动运行

      integrationTest.dependsOn测试 

  6. (可选)从添加依赖check (所以当它始终运行buildcheck执行)

     tasks.check.dependsOn(tasks.integrationTest) 
  7. (可选)添加Java,资源, sourceSet支持自动检测,并在你的IDE创建这些“谐音”。 即IntelliJ IDEA的自动创建一个sourceSet每个组目录的Java和资源,如果它不存在:

     sourceSets { integrationTest { java resources } } 

TL;博士

apply plugin: 'java'

// apply the runtimeClasspath from "test" sourceSet to the new one
// to include any needed assets: test, main, test-dependencies and main-dependencies
sourceSets {
    integrationTest {
        // not necessary but nice for IDEa's
        java
        resources

        compileClasspath += sourceSets.test.runtimeClasspath
        // somehow this redeclaration is needed, but should be irrelevant
        // since runtimeClasspath always expands compileClasspath
        runtimeClasspath += sourceSets.test.runtimeClasspath
    }
}

// define custom test task for running integration tests
task integrationTest(type: Test) {
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
}
tasks.integrationTest.dependsOn(tasks.test)

指的是:

  • java的gradle这个章节45.7.1。 来源组属性
  • java的gradle这个章节45.7.3。 某些源代码集的例子

不幸的是,在示例代码github.com/gradle/gradle/subprojects/docs/src/samples/java/customizedLayout/build.gradle或... / gradle产出/ ... / withIntegrationTests /的build.gradle似乎没有处理这个或有不同/更复杂的/我没有清晰的解决方案呢!



Answer 4:

该星云,小插件消除了样板:

apply plugin: 'nebula.facet'
facets {
    integrationTest {
        parentSourceSet = 'test'
    }
}

对于集成测试具体地讲,即使这是为你做 ,只是适用于:

apply plugin: 'nebula.integtest'

对于每个摇篮插件门户网站链接:

  1. nebula.facet
  2. nebula.integtest


Answer 5:

下面是我什么工作原理摇篮4.0。

sourceSets {
  integrationTest {
    compileClasspath += sourceSets.test.compileClasspath
    runtimeClasspath += sourceSets.test.runtimeClasspath
  }
}

task integrationTest(type: Test) {
  description = "Runs the integration tests."
  group = 'verification'
  testClassesDirs = sourceSets.integrationTest.output.classesDirs
  classpath = sourceSets.integrationTest.runtimeClasspath
}

随着4.0版本,现在摇篮使用单独的类目录中源集中的每个语言。 所以,如果你的构建脚本使用sourceSets.integrationTest.output.classesDir ,你会看到下面的弃用警告。

摇篮现在使用单独的输出目录中每个JVM的语言,但这个版本假设从源集合中的所有类的单一目录。 此行为已取消,并计划在摇篮5.0被删除

为了摆脱这一警告的,只需切换到sourceSets.integrationTest.output.classesDirs代替。 欲了解更多信息,请参见摇篮4.0发行说明 。



Answer 6:

如果您在使用

  • 摇篮5.x的,看看文件科“测试Java>配置集成测试例14和15的详细信息(包括Groovy和DSL科特林,你更喜欢其中任一个)
    • ALT:在“当前”摇篮文档链接2 ,但将来可能会推迟,你应该,如果变化的例子来看看)
  • 对于摇篮4看看古代版3这是附近什么密切@Spina发布于2012年

要获得的IntelliJ认识到定制sourceset的测试源根:

plugin {
    idea
}

idea {
    module {
        testSourceDirs = testSourceDirs + sourceSets["intTest"].allJava.srcDirs
        testResourceDirs = testResourceDirs + sourceSets["intTest"].resources.srcDirs
    }
}


文章来源: How do I add a new sourceset to Gradle?