Java IntelliJ如何知道目录是否为';来源';或a';测试源';?
IntelliJ如何知道目录是“源”还是“测试源”?如何始终将目录标记为“测试源” build.gradle 1Java IntelliJ如何知道目录是否为';来源';或a';测试源';?,java,intellij-idea,gradle,Java,Intellij Idea,Gradle,IntelliJ如何知道目录是“源”还是“测试源”?如何始终将目录标记为“测试源” build.gradle 1 apply plugin: 'java' apply plugin: 'idea' idea { module { sourceDirs += file('src/main/java') testSourceDirs += file('src/awesome-test/java') } } 使用“build.gradle 1”文件
apply plugin: 'java'
apply plugin: 'idea'
idea {
module {
sourceDirs += file('src/main/java')
testSourceDirs += file('src/awesome-test/java')
}
}
使用“build.gradle 1”文件,src/awome test/java
被标记为“测试源”
build.gradle 2
apply plugin: 'java'
apply plugin: 'idea'
idea {
module {
sourceDirs += file('src/main/java')
testSourceDirs += file('src/awesome-test/java')
}
}
sourceSets {
'awesome-test' {
java {
srcDir 'src/awesome-test/java'
}
compileClasspath += sourceSets.main.runtimeClasspath
}
}
但是,只要添加引用此目录的源集(“build.gradle 2”),则src/awesome test/java
将标记为“源”
build.gradle 3
apply plugin: 'java'
apply plugin: 'idea'
idea {
module {
sourceDirs += file('src/main/java')
testSourceDirs += file('src/awesome-test/java')
}
}
sourceSets {
'awesome-test' {
java {
srcDir 'src/awesome-test/java'
}
compileClasspath += sourceSets.main.runtimeClasspath
}
}
task awesomeTest(type: Test) {
testClassesDir = sourceSets.'awesome-test'.output.classesDir
classpath += sourceSets.'awesome-test'.runtimeClasspath
}
为了让事情变得难以理解,如果我添加一个Test
类型的任务,那么src/awesome Test/java
再次被标记为“testsource”
注:IntelliJ 13.0.2,Gradle 1.9
IntelliJ如何知道目录是“源”还是“测试”
来源'?”
GradleAPI告诉IntelliJ哪些目录被标记为源目录,哪些目录被标记为测试源目录
关于你的例子:
awesome test
源代码集将src/awesome test/java
定义为源代码。因为测试源路径包括源路径,所以这里没有冲突。gradle/IntelliJ正确地将src/awesome test/java
标记为源代码awesome test
sourceset被添加到测试任务中,因此它显然没有被用作源,因此将其标记为测试源希望有帮助。过去IntelliJ使用IdeaModel配置来设置源和测试目录。基于我打开的一个an,我相信IntelliJ 13.1.0将再次使用IdeaModel配置。虽然我可以用它来重新设计我的项目结构,以适应13.0.2中引入的新行为(13.0.1似乎将idea配置中的内容视为事实),但我更愿意告诉IntelliJ“这是”目录是一个“测试”目录。有时,我需要定义一个用于设置测试的源集,但不作为测试运行。您是否有任何与此相关的文档链接?您是否试图使用某种自定义测试框架来支持您的测试?如果你能更详细地解释上下文,可能会有所帮助。主要文档来源是和StackOverflow。是的,我是,那些支持源需要参考测试源。这会导致问题,因为“源”不能引用“测试源”。@MikeRylander从技术上讲,它们可以引用,但最终会得到一个复杂的构建文件。您是否考虑将测试框架输出到单独的模块中?我们公司也有同样的情况,把它搬出去效果很好。您的测试框架将成为一等公民,并且可以在测试中作为依赖项引用。漂亮又干净。下面是如何轻松操作:stackoverflow.com/a/36057080/715269@Gangnus,这个问题与Idea如何根据Gradle中的Idea配置自动确定源类型有关。看起来IntelliJ正在2016.11版中添加对自定义源集的支持。你在用格雷德尔解决这个问题。但谁说只有格拉德尔才能解决这个问题?2.你的自动设置很奇怪——点击设置我的根要容易得多。3.我也和格雷德尔打过交道,但徒劳无功,通过点击找到了设置,我很高兴。我以为它能帮你。唉。当然,这种方法可以帮助很多人,即使你不需要它。