如何使用Gradle为单独的子项目依赖项配置IDEA

时间:2019-02-24 14:00:01

标签: gradle intellij-idea gradle-kotlin-dsl

我有一个特殊的项目结构:

root project
    + sub project 1
    + sub project 2

子项目表示“插件”:应用程序的一部分内置到单独的jar中,并在部署时由根项目在运行时动态扫描。 (可能还会向部署中添加其他子项目,这些子项目是单独开发的。)另一个问题是子项目取决于(编译,或更准确地说是编辑时间)根项目(根项目包含DSL,并且子项目为此定义了脚本) DSL,因此仅语法和共文本帮助才需要依赖项。

在gradle构建中,我有一个发布和部署任务,该任务将所有三个项目的构建结果(jar)包含在一个要部署的zip中。因此,作为独立应用程序,它可以正常工作。

但是,当我尝试运行根项目时,它无法访问子项目的jar,因为要避免循环引用,我不能使root依赖子项目。

使应用在IDEA中运行时能够构建,运行和检测插件,同时保持松散耦合在gradle级别上的最佳实践是什么?

我想的一些想法:

1)以某种方式扩展或配置了根项目的gradle脚本的构建任务,以使其依赖并包含子项目。 (我可以不建立循环引用吗?)

2)以某种方式将其他项目配置添加到IDEA项目中。是否可以在不重新构建每个gradle脚本的情况下将其删除?

3)使IDEA包含运行时环境中子项目的构建结果。

有最佳实践吗?

1 个答案:

答案 0 :(得分:0)

好吧,我想出了一个解决方案。

首先,我创建了一个新的core子项目,并将根项目的所有源代码都移到了该子项目中。 (为完全准确起见,我将主函数保留在根目录中。)

root project
    + core
    + sub project 1 (plugin)
    + sub project 2 (plugin)

根项目依赖于core和附加的plugin项目,因此当我从IDEA运行它或构建发行版时,它都会完成。

另一方面,这些插件现在可能依赖于core,将没有循环依赖关系。

我遇到的另一个问题是:尽管我的插件项目只有资源源目录,但是要在脚本中启用来自core的DSL作为上下文帮助,我也必须创建一个空的kotlin源目录。 (可能是按约定进行配置的。)