Dan*_*iel 7 intellij-idea gradle intellij-14
我试图让Gradle(2.1)和IntelliJ(14.0.2)发挥得很好.具体来说,我已经导入了一个示例Gradle项目,该项目包含用于集成测试的单独源集到IntelliJ中.
使用Gradle在命令行上构建项目,我能够成功运行集成测试.另一方面,当在IntelliJ内部运行时,我有两个问题:
1)由于集成测试中依赖于无法解析的第三方库(commons-collections),因此IntelliJ内部编译失败.
2)如果我删除上面的依赖项并编译,我无法在IntelliJ中运行集成测试.我收到以下错误消息:
没有找到给定的测试包括:[org.gradle.PersonIntegrationTest.canConstructAPersonWithAName]
文件结构如下所示:
src
integration-test
java
resources
main
java
resources
test
java
resources
build.gradle
Run Code Online (Sandbox Code Playgroud)
和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
Run Code Online (Sandbox Code Playgroud)
任何关于如何使这项工作的想法将非常感激.
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 ]
}
}
Run Code Online (Sandbox Code Playgroud)
更多内容见http://www.gradle.org/docs/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html
编辑反映丹尼尔的评论: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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4916 次 |
| 最近记录: |