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
答案 0 :(得分:1)
在include_def.gradle
中,按照以下方式定义copySpec:
ext.withSubsystemFiles = copySpec {
//-- Copy SubsystemFiles
}
ext.withSpecialResources = copySpec {
//-- Copy SpecialResources
}
ext.withServiceContext = copySpec {
//-- Copy ServiceContext
}
如果要在项目中定义额外属性,则必须使用ExtraPropertiesExtension