首页 > 解决方案 > 多模块项目中的gradle继承

问题描述

update 05/30/18

我认为技术问题是由于 ToYonos 所链接的问题造成的。

所以,让我扩大非技术问题:

我有一个多模块项目,其中许多部分由许多不同的人拥有。我们在模块中遵循类似的结构,但没有直接继承。让我们这样说:

每个模块都以相同的方式松散地做同样的事情,但略有不同;) 我们想在每一层提取公共部分并将它们放在一个公共文件中,但仍然允许每个模块在每一层有自己的自定义。

我希望“应用自”可以做到这一点,但由于范围问题和 gradle 自上而下的命令和控制风格,似乎存在限制(导出方法、插件等)。

我看到的一种方法是完全从这个设置.gradle:

include ':module1'
include ':module1:java'
include ':module1:java:services'
include ':module1:java:services:service1'

对此:

include ':root_common'
project(':root_common').projectDir = "$rootDir/common" as File

include ':root_common:module1'
project(':root_common:module1').projectDir = "$rootDir/module1" as File

include ':root_common:module1:module_common'
project(':root_common:module1:module_common').projectDir = "$rootDir/common/module" as File

include ':root_common:module1:module_common:java'
project(':root_common:module1:module_common:java').projectDir = "$rootDir/module1/java" as File

include ':root_common:module1:module_common:java:java_common'
project(':root_common:module1:module_common:java:java_common').projectDir = "$rootDir/common/java" as File

include ':root_common:module1:module_common:java:java_common:services'
project(':root_common:module1:module_common:java:java_common:services').projectDir = "$rootDir/module1/java/services" as File

.... and so on ....

这似乎相当难以管理。有没有更好的办法?

original 05/29/18

我有以下工作:

我的build.gradle

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    ext {
        dockerPluginVersion = '0.19.2'
    }
    dependencies {
        classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:${dockerPluginVersion}"
    }
}

apply plugin: "com.palantir.docker"
apply plugin: "com.palantir.docker-run"

docker {
    ....
}

我希望其他人的build.gradle能够使用与上述build.gradle相同的配置而无需复制/粘贴,所以我想出了以下内容:

其他人的build.gradle

apply from: ${rootDir}/common/docker/build.gradle

当我运行上述内容时,我得到

* What went wrong:
A problem occurred evaluating script.
> Plugin with id 'com.palantir.docker' not found.

如果我仅将My build.gradle的buildscript部分复制/粘贴到他们的build.gradle,那么它可以工作。所以,一定是一些分辨率/订购问题。

我认为基本问题是:如何从build.gradle中应用和配置插件,该插件本身通过apply from被视为插件?

标签: gradle

解决方案


推荐阅读