我们的环境中有几个 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/