Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IntelliJ如何知道目录是否为';来源';或a';测试源';?_Java_Intellij Idea_Gradle - Fatal编程技术网

Java IntelliJ如何知道目录是否为';来源';或a';测试源';?

Java 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”文件

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”文件,
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.我也和格雷德尔打过交道,但徒劳无功,通过点击找到了设置,我很高兴。我以为它能帮你。唉。当然,这种方法可以帮助很多人,即使你不需要它。