不要将 gradle 子项目安装为外部依赖项
Posted
技术标签:
【中文标题】不要将 gradle 子项目安装为外部依赖项【英文标题】:Do not install gradle sub-project as external dependency 【发布时间】:2019-10-03 04:46:30 【问题描述】:我有以下 gradle 多项目结构。
root-project
-A
build.gradle
-B
build.gradle
build.gradle
settings.gradle
A
有一些纯 java 代码和几个外部依赖项。 B
已将 A
包含为 compile(':A')
。 B
也有一个应用为 apply plugin: 'maven'
的 maven 插件。
现在我的问题是每当我做./gradlew install
,B
包括A
作为外部maven 依赖项。使用B
的人无法编译,因为它没有找到A
。如何跳过将 maven 插件应用到 A
并将其所有代码包含在 B
中?
【问题讨论】:
【参考方案1】:要么:
-
将工件发布到外部或内部存储库
直接依赖项目库如下图。
-
// Project B
dependencies
implementation(project(":a"))
参考:
https://docs.gradle.org/current/userguide/multi_project_builds.html#sec:project_jar_dependencies https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation【讨论】:
您好,感谢您的回复。我已经在这样做了。但我不想在外部或内部发布 A。 那么选项(2)就是你所需要的。在project b
中声明对project a
的依赖。
这就是我正在做的。但是当我发布B
时,它会自动发布A
,版本为unknown
。我在问题中也提到了这一点。抱歉,如果不清楚。【参考方案2】:
如果项目B
正在生成一个jar,我们有很多选择,但就我而言,它应该是第三方使用的maven 依赖项。我找不到直接的解决方案。所以我最终将 A
的源添加到 B 中。在 B 的 build.gradle 中是这样的:
sourceSets
main
java
srcDir 'src/main/java'
srcDir '../A/src/main/java'
唯一的缺点是我必须在B
中包含A
的依赖项。如果有人有更优雅的方法,我很乐意接受。
【讨论】:
以上是关于不要将 gradle 子项目安装为外部依赖项的主要内容,如果未能解决你的问题,请参考以下文章
混合 vue-template-compiler 必须安装为 laravel 项目中的对等依赖项
Gradle + Spring启动项目:包括外部jar依赖项
如何告诉 M2Eclipse 将 jar 文件安装为 maven 依赖项
Laravel mix vue-template-compiler 必须安装为对等依赖项