不要将 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 installB 包括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 必须安装为对等依赖项

如何在 android 库 gradle 项目中包含依赖项?

如何将 npm 依赖项添加为对等依赖项