Gradle & Intellij 可选择包含其他模块
Gradle & Intellij Optionally include other modules
我们的环境中有几个 git 存储库,一些是 Web 前端,一些是服务层,一些是后端。我们的一些模块是库,它们是其他模块的依赖项,有些不是依赖项但包含 Web 服务等。
如果开发人员将模块包含在 IntelliJ 项目中,我需要能够将 Gradle 设置为可选 link 到模块的源代码。例如,UI 开发人员不需要所有 Java 库来完成他们的工作,但另一个开发人员可能需要。
可以为 Gradle 添加 maven 插件并安装依赖模块,但这远非理想。这样做需要我们手动对每个模块进行安装,将编译后的 jar 放入 .m2 目录,以便依赖模块可以使用该 jar。在每个 install/refresh 之后,您必须进入 IntelliJ 并重新添加每个库的源路径,因为它不是自动的。当我重建我的项目时,此方法也不会自动执行安装。
我知道这是可能的,因为我们在我过去工作过的公司做过。我没有太多参与构建管理,所以我没有了解它是如何完成的。
我在这里找到了解决问题的好方法:。
我正在尝试让代码在插件中工作,如果我成功了,我会post这里的代码。
这是我的完整顶级 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
}
}
}
我们的环境中有几个 git 存储库,一些是 Web 前端,一些是服务层,一些是后端。我们的一些模块是库,它们是其他模块的依赖项,有些不是依赖项但包含 Web 服务等。
如果开发人员将模块包含在 IntelliJ 项目中,我需要能够将 Gradle 设置为可选 link 到模块的源代码。例如,UI 开发人员不需要所有 Java 库来完成他们的工作,但另一个开发人员可能需要。
可以为 Gradle 添加 maven 插件并安装依赖模块,但这远非理想。这样做需要我们手动对每个模块进行安装,将编译后的 jar 放入 .m2 目录,以便依赖模块可以使用该 jar。在每个 install/refresh 之后,您必须进入 IntelliJ 并重新添加每个库的源路径,因为它不是自动的。当我重建我的项目时,此方法也不会自动执行安装。
我知道这是可能的,因为我们在我过去工作过的公司做过。我没有太多参与构建管理,所以我没有了解它是如何完成的。
我在这里找到了解决问题的好方法:。
我正在尝试让代码在插件中工作,如果我成功了,我会post这里的代码。
这是我的完整顶级 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
}
}
}