gpt4 book ai didi

gradle - 在 Intellij/Gradle 中创建包含源代码和测试的平面目录结构?

转载 作者:行者123 更新时间:2023-12-03 04:20:55 27 4
gpt4 key购买 nike

我第一次将 Kotlin 与 Intellij 和 Gradle 一起使用(我最初的目标是在学习 Kotlin 的同时实现一个个人项目,我认为最好使用“完整”环境)。我想用一个简单的平面目录结构来组织我的项目,我的所有代码和测试都在同一个目录中。所以我希望它看起来像这样:

project
|-src
|-MyClass.kt
|-MyClassTest.kt
|-MyOtherClass.kt
|-MyOtherClassTest.kt

我试图查看 Gradle 和 Intellij 的文档,但老实说,我无法对其中任何一个做出正面或反面。

Gradle 中的 Kotlin 插件似乎具有默认目录结构,但可以更改。因此,我尝试根据在搜索中找到的一些代码片段将以下内容添加到 build.gradle 文件中:
sourceSets {
main {
kotlin {
srcDirs = ['src']
exclude('*Test.kt')
}
}
test {
kotlin {
srcDirs = ['src']
include('*Test.kt')
}
}
}

这似乎将所有代码(包括源代码和测试代码)都放入 main 中。源代码工作正常,但测试在导入“kotlin.test”包时提示 undefined reference 。这是我完整的 build.gradle 文件(除 sourceSets 外,所有这些都是由 IntelliJ 预先生成的):
buildscript {
ext.kotlin_version = '1.2.41'

repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

version '1.0-SNAPSHOT'

apply plugin: 'kotlin'

sourceSets {
main {
kotlin {
srcDirs = ['src']
exclude('*Test.kt')
}
}
test {
kotlin {
srcDirs = ['src']
include('*Test.kt')
}
}
}

repositories {
mavenCentral()
}

dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}

compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}

然后 Intellij 具有项目结构设置,我可以使用它来将 src 文件夹标记为源或测试,但这似乎不允许您将其设置为两者。我也对模块窗口显示的内容感到困惑。在顶层它有四个蓝色框的“myproject”和一个蓝色框的“myproject”,在第一个里面是“myproject_main”和“myproject_test”,两者都有一个蓝色框。我不明白一个蓝框和四个蓝框之间的区别,或者这些东西与我的目录结构有何关系(也许不是?)。然后我不确定这些设置如何与 Gradle 交互。

总而言之,我很困惑,我什至不知道我的问题是与 Gradle 设置、Intellij 设置还是两者兼而有之。我以为这将是一项简单的任务,但它变成了一个巨大的兔子洞。理想情况下,我想创建我所描述的目录结构,但即使只是对我一直在搞乱的所有这些设置做了一个很好的解释,我也会很高兴,因为我在网上找到的资源没有帮助我完全理解。

最佳答案

您需要了解的关键是 IntelliJ IDEA 要求每个目录属于单一类型的单一源根目录。因此,即使 Gradle 允许您说与特定模式匹配的文件应视为测试源,而与此模式不匹配的文件应视为生产源,但此类配置无法正确反射(reflect)在 IntelliJ IDEA 项目结构中。

另一个关键是你永远不应该在从 Gradle 导入的项目中手动更改项目结构。这将导致 IDE 和命令行构建的不同行为,并且您的更改很可能会在后续项目重新同步期间丢失。

有四个蓝框的东西叫做模块组,有一个蓝框的东西叫做模块。将 Gradle 项目导入 IntelliJ IDEA 时,会为每个 Gradle 模块创建一个模块组,然后在每个模块组下创建三个模块(用于 Gradle 模块整体、其生产源和测试源) .

如果您想将代码保存在单个目录中,那么基本上您需要将所有代码视为生产源。只是不要为测试根指定任何设置,并为所有依赖项使用常规的“编译”范围。

或者,如果您想将您的应用程序发送给用户,并且不想将已编译的测试作为其中的一部分发送,您应该将生产和测试源保存在不同的目录中。如果您创建如下结构,您仍然可以减少嵌套:

project
|-src
|-MyClass.kt
|-MyOtherClass.kt
|-testSrc
|-MyClassTest.kt
|-MyOtherClassTest.kt

关于gradle - 在 Intellij/Gradle 中创建包含源代码和测试的平面目录结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50663698/

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