gradle多项目构建的公共代码

时间:2015-06-07 17:47:21

标签: gradle

我对文件夹buildSrc中的多项目构建有一些常见的类定义:

root
 build.gradle
 settings.gradle
 a/
   build.gradle
 b/
   build.gradle
 buildSrc/
   common.gradle

,其中      settings.gradle 表示

include ':a', ':b'

A /的build.gradle

project(":a") {
    task someTask(type: CommonTask) {
        println "Running some task"
    }
}

buildSrc / common.gradle

class CommonTask extends DefaultTask {
    @TaskAction
    def someAction() {
        println "Running common task"
    }
}

根据文件:

https://docs.gradle.org/current/userguide/organizing_build_logic.html

  

buildSrc 项目。将构建类的源代码放入   某个目录和Gradle自动编译它们并包含   它们位于构建脚本的类路径中。

但是在运行gradle build时出现错误:

  

无法找到属性' CommonTask'在项目':a'。

那么我们如何才能为多项目构建提供通用的类定义?

修改

apply from: "$rootDir/buildSrc/common.gradle"添加到project a无效

EDIT2

我将文件common.gradle置于buildSrc/src/main/groovy/org/gradle/Common.groovy

并在根项目中' build.gradle

repositories {
    mavenLocal()
}

dependencies {
    compile group: 'org.gradle'
}
  

评估根项目' root'时出现问题。   无法在根项目' root'上找到参数[{group = org.gradle}]的方法compile()。

编辑3

我有2个文件:

buildSrc/src/main/groovy/com/iggy/gradle/A.groovy

package com.iggy.gradle

String someA() {
    return "a"
}

buildSrc/src/main/groovy/com/iggy/gradle/B.groovy

package com.iggy.gradle

String someB() {
    String a = someA()
    return a
}

但我收到错误:Could not find method someA()

不应该解决同一个包中的方法吗?添加@PackageScopepublic无济于事。那么如何从另一个groovy文件导入方法呢?

0 个答案:

没有答案