gpt4 book ai didi

intellij-idea - Gradle 中的自定义源集已导入 IntelliJ 14

转载 作者:行者123 更新时间:2023-12-04 11:37:13 24 4
gpt4 key购买 nike

我试图让 Gradle (2.1) 和 IntelliJ (14.0.2) 玩得很好。具体来说,我已经将一个包含用于集成测试的单独源集的示例 Gradle 项目导入到 IntelliJ。

该项目在命令行上使用 Gradle 构建得很好,我能够成功运行集成测试。另一方面,在 IntelliJ 中运行时,我有两个问题:

1) 在 IntelliJ 中编译失败,因为集成测试依赖于无法解析的第三方库 (commons-collections)。

2)如果我删除上面的依赖项并编译,我将无法在 IntelliJ 中运行集成测试。我收到以下错误消息:

No tests found for given includes: [org.gradle.PersonIntegrationTest.canConstructAPersonWithAName]



文件结构如下所示:
src
integration-test
java
resources
main
java
resources
test
java
resources
build.gradle

和 build.gradle:
apply plugin: 'java'

repositories {
mavenCentral()
}

sourceSets {
integrationTest {
java.srcDir file('src/integration-test/java')
resources.srcDir file('src/integration-test/resources')
}
}

dependencies {
testCompile 'junit:junit:4.11'
integrationTestCompile 'commons-collections:commons-collections:3.2'
integrationTestCompile sourceSets.main.output
integrationTestCompile configurations.testCompile
integrationTestCompile sourceSets.test.output
integrationTestRuntime configurations.testRuntime
}

task integrationTest(type: Test, dependsOn: jar) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
systemProperties['jar.path'] = jar.archivePath
}

check.dependsOn integrationTest

关于如何使这项工作的任何想法将不胜感激。

完整的 Gradle 示例项目在 Gradle 发行版中的 samples/java/withIntegrationTests 下可用

最佳答案

您需要告诉 IDEA 从您的 integrationTest 映射条目配置到您的项目中作为 TEST 依赖项。我不确定您是否也需要添加源根目录。重要的部分是:

idea {
module {
//and some extra test source dirs
testSourceDirs += file('some-extra-test-dir')
generatedSourceDirs += file('some-extra-source-folder')
scopes.TEST.plus += [ configurations.integrationTest ]
}
}

更多信息请参见 http://www.gradle.org/docs/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html

编辑以反射(reflect) Daniel 的评论: generatedSourceDirs是 Gradle 2.2+。
要设置测试任务,您将使用类似的任务

task integTest(type: Test) {
description = 'Runs the integration tests.'
group = 'verification'
testClassesDir = sourceSets.integTest.output.classesDir
classpath = sourceSets.integTest.runtimeClasspath
reports.junitXml.destination = file("${project.testResultsDir}/$name")
reports.html.destination = file("${project.reporting.baseDir}/$name")
shouldRunAfter test
}
check.dependsOn integTest

关于intellij-idea - Gradle 中的自定义源集已导入 IntelliJ 14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27486040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com