我具有以下Java项目结构:
Util
|
-- Core
|
-- Services
|
-- Tools
项目:对Core和Util项目的工具和服务引用,问题是我最终在每个项目上编写了相同的依赖项,如果有继承关系,则必须有更好的方法来添加引用项目的依赖项需要。
我了解Gradle中的多个项目,但这与多重项目不同,因为我基本上可以使用Core库,对其进行编译(它将包含Core + Util库)并在另一个项目中使用它。
我想知道什么是最好的方法吗?
答案 0 :(得分:0)
在每个项目中重复相同的依赖关系通常是合理的,因为在更大的项目中,您永远都不知道它们何时会变得不同,并且当有人更改公共依赖关系列表时,您也不想处理编译/运行时问题
我相信向您的构建中添加依赖项分析器插件更为实用。它将帮助您删除不必要的依赖关系并显式添加传递性依赖关系。并且,如果将此插件添加到构建链中,它将有助于您将来保持依赖关系的健康。在gradle-dependency-analyze处选择此插件,或者在某个地方有更好的fork或同等产品。
在您的情况下,您实际上没有选择权,因为只有两种依赖项:(1)外部(其他jar人工制品)或(2)内部(多模块构建中的另一个模块)。>
2.1使用外部类似Maven的依赖项时,它将带有自己的依赖项(它们被称为“传递性依赖项”)。这意味着如果您执行compile 'yourgroup:Core:1.0'
,那么您将获得Util
作为传递依赖。但是,如上所述,最好在编译过程中使用可传递依赖项时明确列出这些依赖关系,或防止它们被意外删除并使应用程序在运行时崩溃。
2.2。如果您的项目位于同一版本控制库中,并且通常一起更改和构建,则多模块布局是您的最佳选择。在这种情况下,您将引用Core
之类的compile project(':Util:Core')
依赖项,它也将Util
当作传递依赖项。这样,您就可以按照您的要求进行操作,并为Services
和Tools
定义依赖项-在subprojects {}
的{{1}}闭包中。
内置多模块功能并不会限制您在其他地方使用Core/build.gradle
库。无论是否为多模块构建,都可以始终以相同的方式向Core
添加maven-publish
插件,执行Core/build.gradle
任务并从另一个项目引用publishToMavenLocal
对于外部依赖项。
您始终可以将公共代码(如将添加公共依赖项的代码)放入外部gradle文件或自定义插件中,并Core.jar
放入apply
和Services
中