Gradle多应用程序WAR构建文件拆分为单独的包含文件 - ' def'打破它

时间:2017-04-11 12:14:38

标签: gradle groovy

Gradle构建用于八个应用程序。

目前,所有内容都被转储到一个庞大的build.gradle文件中。

我正在尝试将其拆分为每个应用程序WAR版本的一个Gradle文件。

然而,他们都有很多共同的' def'用法。分享' def'用法对我没用。

我已经阅读了这篇文章,因为我不知道Groovy - 但是' def' def' def' def' def' def不打球,在Gradle文件之间分享东西时似乎有特殊情况吗?

错误显示' def'重用并不起作用(在一个巨大的单个build.gradle文件中都很好):

引起:groovy.lang.MissingPropertyException:没有这样的属性:withSubsystemFiles for class:org.gradle.api.internal.file.copy.SingleParentCopySpec

如何解决? (或者......这是一个可怕的构建设计吗?也可以选择其他方式。)

文件: build.gradle

//etc....

if ("foo".equals(  project.getProperty('application')  )) {
    apply from: "${rootDir}/gradle/foo_application.gradle"
}

if ("bar".equals(  project.getProperty('application')  )) {
    apply from: "${rootDir}/gradle/bar_application.gradle"
}

//etc... lots more applications to build

文件: /gradle/foo_application.gradle

apply from: "${rootDir}/gradle/include_def.gradle"

task fooApplicationWar(type: War) {  
    from "website/application_foo"

    webInf{
        with withSubsystemFiles
        with withSpecialResources
        with withServiceContext

        // then many   'from'   that are __unique__ to fooApplicationWar                
    }
    // etc...
}

文件: /gradle/bar_application.gradle

apply from: "${rootDir}/gradle/include_def.gradle"

task barApplicationWar(type: War) {  
    from "website/application_bar"

    webInf{
        with withSubsystemFiles
        with withSpecialResources
        with withServiceContext

        // then many   'from'   that are __unique__ to barApplicationWar                
    }
    // etc...
}

文件: /gradle/include_def.gradle

def withSubsystemFiles = copySpec {
    //-- Copy SubsystemFiles
}
def withSpecialResources = copySpec {
    //-- Copy SpecialResources
}
def withServiceContext = copySpec {
    //-- Copy ServiceContext
}
// etc... many many other 'def' that are common, shared by all application builds

1 个答案:

答案 0 :(得分:1)

include_def.gradle中,按照以下方式定义copySpec:

ext.withSubsystemFiles = copySpec {
    //-- Copy SubsystemFiles
}
ext.withSpecialResources = copySpec {
    //-- Copy SpecialResources
}
ext.withServiceContext = copySpec {
    //-- Copy ServiceContext
}

如果要在项目中定义额外属性,则必须使用ExtraPropertiesExtension