gpt4 book ai didi

intellij-idea - 使用 IntelliJ IDEA 构建 Gradle 多模块的正确结构

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

我有一个 Kotlin 项目,它由三个模块组成:

Core < Service < Web

结构是:
build.gradle
core/
build.gradle
service/
build.gradle
web/
build.gradle

根的结构 build.gradle文件是:
buildscript {
ext.kotlin_version = '1.1.60'
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
subprojects {
apply plugin: 'kotlin'
apply plugin: 'jacoco'
compileKotlin {
kotlinOptions.jvmTarget = '1.8'
}
repositories {
mavenCentral()
jcenter()
}
}

各个构建文件看起来像(对于 core ):
dependencies {
// Kotlin
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
...
}

对于 service (注意唯一的区别是项目依赖):
dependencies {
compile project (':core')
// Kotlin
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
...
}

我想做一些优化,但我还在学习 Gradle,找不到重新组织事物的正确方法。我遇到的问题是:
  • 我无法构建 serviceweb个人,因为他们提示无法找到他们依赖的子项目。 (例如,通过 gradle build 目录中的 service/。)
  • 如何定义 Kotlin stdlib-jre8根级别的依赖关系,所以它在我的三个构建文件中没有重复?
  • 我的根构建文件的子项目/构建脚本任务如何使用相同的存储库定义,这样我就不必定义 mavenCentral()/jcenter()两次?

  • 基本上我的这个构建结构是通过一些实验/网络资源拼凑而成的, 恰好大部分时间都在工作 ,但我想要一些关于如何以正确方式进行操作的指导,以便 (1) 它遵循良好的 Gradle 实践,并且 (2) 通过自动导入 IDEA 仍然可以很好地工作。

    最佳答案

  • 如果你想在一个模块上运行一个构建,你可以运行:gradle :web:build
  • 与您在 subprojects 中添加存储库的方式相同。子句,您可以添加 dependencies堵在那里。确保只有共享的依赖项在那里。例如,compile project(':core')应该只在相关项目中。多个dependency没关系 block 。也就是说,使用 subproject 通常更让人头疼。条款。因为,如果其中一个模块的依赖关系发生变化,您将被迫为所有模块更新它
  • 关于repository定义,它们是非常不同的。 buildscript 中的那个Gradle 本身使用 block 来查找插件和其他“预构建”要求。子模块上的一个用于查找给定模块中源代码的依赖关系。如上一点所述,放置在相应的模块构建脚本上时更易于管理。

  • 更新:

    如果您想为所有模块保持相同的版本, ext 上定义的变量在构建脚本中也应该能够从子模块中访问: ext.kotlin_version = '1.1.60'如果你有多个,你可以像这样添加它们:
    ext {
    kotlin_version = '1.1.60'
    junit_version = '4.12'
    }

    此外,如果您想在模块之间共享代码,您可以随时将其提取到 gradle 文件并在需要的地方加载: apply file: "$rootDir/path/to/script.gradle"
    关于#3,我会给你一个实际的例子。

    Google 有自己的 maven 存储库,其中包含 android 模块的所有依赖项。如果您的项目同时包含服务器端模块和 android 模块,您可能不需要服务器端模块来查找 Gradle artefact 存储库上的依赖项(artefact 是 jar 依赖项的名称)。

    至于 buildscript存储库,在您的情况下,您只加载一个位于 mavenCentral() 的类路径(预构建)依赖项所以你可以删除 jcenter()这里。

    关于intellij-idea - 使用 IntelliJ IDEA 构建 Gradle 多模块的正确结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48269862/

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