【问题标题】:How to add a dependency from the main project to the subprojects in gradle/groovy?如何将主项目的依赖项添加到 gradle/groovy 中的子项目?
【发布时间】:2021-05-26 10:55:14
【问题描述】:

给定以下项目结构:

.
├── src
│   └── proto
│       └── ....
├── build/generated/..
│   ...
├── proj1
│   ├── src
│   │   └──...
│   └── build.gradle
├── proj2
│   └── person-service
│       ├── src
│       │   └──...
│       └── build.gradle
├── build.gradle
└── settings.gradle

和 settings.gradle:

rootProject.name = 'mainProj'

include 'proj1'
include 'proj2'

mainProj 将一些Java 类编译到build 文件夹中,该文件夹由sourceSets 包含在mainProj 的build.gradle 中;他们编译得很好。

但是,子项目在编译时无法访问生成的类。不幸的是,以下内容在 proj1/build.gradle 中不起作用:

dependencies {
    runtimeOnly  project(':mainProj')
}

它失败了:

...
A problem occurred evaluating project ':proj1'.
> Project with path ':MainProj' could not be found in project ':proj1'.
...

否则,子项目编译/运行良好,没有缺少此依赖项的代码。

【问题讨论】:

    标签: java gradle protocol-buffers grpc multi-project


    【解决方案1】:

    注意: Stackoverflow 的神奇之处在于,每当我发布问题时,我都会设法以一种导致解决方案的方式思考问题。我 80% 的问题都是这种情况。

    其中一个解决方案是在项目中添加另一个子模块:

    settings.gradle:

    
    rootProject.name = 'mainProj'
    
    include `shared`
    include 'proj1'
    include 'proj2'
    
    

    ./build.gradle 中的任何内容都应移至./shared/build.gradle;该位置(鉴于子项目在settings.gradle 中正确设置)不应该有所作为。在此解决方案中,根 build.gradle 可以留空。

    完成上述操作后,以下应该是一个有效的依赖:

    dependencies {
        runtimeOnly  project(':shared')
    }
    

    【讨论】:

    • 由于其他原因,这可能是一个更好的设计,但只是为了让您知道为什么第一种方法不起作用:当您编写 project(':mainProj') 时,Gradle 会查找名为 mainProj 的子项目.要查找根项目,只需键入project(':')
    • 我想这就是我一直在寻找的答案!
    猜你喜欢
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多