kar*_*fai 1 groovy gradle build.gradle
我是新手.所以,直截了当.我想实现如下块.请注意,这些库是动态的,可供其他开发人员添加以用于所需的库.
libraries {
slf4j 'org.slf4j:slf4j-api:1.7.21'
junit 'junit:junit:4.12'
}
Run Code Online (Sandbox Code Playgroud)
所以我可以像这样打电话给他们.
dependencies {
compile libraries.slf4j
testCompile libraries.junit
}
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做.但我从这里找到了一些相关的解决方案.如下所示:
apply plugin: GreetingPlugin
greeting {
message 'Hi'
greeter 'Gradle'
}
class GreetingPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create("greeting", GreetingPluginExtension)
project.task('hello') {
doLast {
println "${project.greeting.message} from ${project.greeting.greeter}"
}
}
}
}
class GreetingPluginExtension {
String message
String greeter
}
Run Code Online (Sandbox Code Playgroud)
问题是当我添加到greeting块时,我需要声明它们GreetingPluginExtension.任何想法如何使它只在greeting块上更新?
你需要做的是利用groovy元编程.您可以在下面找到一个样本,但功能齐全.
apply plugin: LibrariesPlugin
libraries {
slf4j 'org.slf4j:slf4j-api:1.7.21'
junit 'junit:junit:4.12'
}
class LibrariesPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create("libraries", LibrariesPluginExtension)
project.task('printLib') {
doLast {
println "$project.libraries.slf4j"
println "$project.libraries.junit"
project.libraries.each {
println "$it.key -> $it.value"
}
}
}
}
}
class LibrariesPluginExtension {
Map libraries = [:]
def methodMissing(String name, args) {
// TODO you need to do some arg checking here
libraries[name] = args[0]
}
def propertyMissing(String name) {
// TODO same here
libraries[name]
}
Iterator iterator() {
libraries.iterator()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |