java - Gradle & Intellij 可选择包含其他模块

标签 java intellij-idea gradle

我们的环境中有几个 git 存储库,有些是 Web 前端,有些是服务层,有些是后端。我们的一些模块是库,是其他模块的依赖项,有些不是依赖项,但包含 Web 服务等。

如果开发人员将该模块包含在 IntelliJ 项目中,我需要能够设置 Gradle 以选择性地链接到该模块的源。例如,UI 开发人员不需要所有 Java 库来完成其工作,但其他开发人员可能需要。

可以为 Gradle 添加 Maven 插件并在依赖模块上进行安装,但这远非理想。这样做需要我们手动在每个模块上进行安装,将编译后的 jar 放入 .m2 目录中,以便依赖模块可以使用该 jar。每次安装/刷新后,您都必须进入 IntelliJ 并重新添加每个库的源路径,因为它不是自动的。当我重建项目时,此方法也不会自动执行安装。

我知道这是可能的,因为我们在我过去工作过的一家公司就是这么做的。我没有太多参与构建管理,所以我不了解它是如何完成的。

最佳答案

我在这里找到了一个很好的解决方案:https://stackoverflow.com/a/23574904/3088642 .

我正在尝试使代码在插件中工作,如果成功,我将在此处发布代码。

这是我完整的顶级 build.gradle 文件:

// Make sure we've parsed sub-project dependencies
evaluationDependsOnChildren()
// Map of all projects by name
def subProjectsByName = subprojects.collectEntries { p -> [p.name, p] }

// Replace artifact dependencies with subproject dependencies, if possible
subprojects.each { p ->
    def changes = [] // defer so we don't get ConcurrentModificationExceptions
    p.configurations.each { c ->
        c.dependencies.each { d ->
            def sub = subProjectsByName[d.name]
            if (sub != null) {
                changes.add({
                    c.dependencies.remove(d)
                    p.dependencies.add(c.name, sub)
                })
            }
        }
    }
    for (change in changes) {
        change()
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

还有我的settings.gradle 文件:

// find all sub-projects and include them
rootDir.eachFileRecurse {
    if (it.name == "build.gradle") {
        def projDir = it.parentFile
        if (projDir != rootDir) {
            include projDir.name
            project(":${projDir.name}").projectDir = projDir
        }
    }
}

关于java - Gradle & Intellij 可选择包含其他模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28844294/

相关文章:

java - 如何使用jetty-maven-plugin公开静态内容?

java - Jackson lib gradle 的 Eclipse 类路径问题

java - 在不同系统上使用 VBO 进行 LWJGL 渲染

java - 如何使用 IntelliJ 对 POM.xml 中定义的特定类别运行 Junit 测试

java - IntelliJ IDE(社区版)不支持 var 声明 Java 10

java - 如何使用 CPLEX 配置 IntelliJ Idea

intellij-idea - Intellij 中的 jitpack/gradle 问题

windows - Gradle:无法连接到 Windows 上的 Kotlin 守护进程

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : error in SQL syntax

java - 从 Gradle 依赖项中排除 .class 文件