我想避免创建不同的配置,因为我希望有很多不同的行为与我的依赖关系相关联,而不仅仅是这个。
因此,感谢'ext'属性,我能够将自己的数据与依赖关系相关联:
runtime 'org.apache.logging.log4j:log4j-api:2.5'
runtime 'org.apache.lucene:lucene-core:5.4.1'
runtime('hsqldb:hsqldb:1.8.0.10') { ext.exportTo = 'jdbc' }
现在我想利用它将默认情况下的依赖项复制到'libs /',如果指定了exportTo,则使用'libs / $ {exportTo} /'。
task copyRuntimeLibs(type: Copy) {
into "build/dependencies"
from configurations.runtime
}
所以我正在尝试为这些特殊的依赖项创建一个动态创建的配置,并创建一个动态创建的任务来完成这项工作,我将其链接到主要任务'copyRuntimeLibs':
configurations.runtime.allDependencies.withType(ExternalModuleDependency).each { d ->
if (d.hasProperty("exportTo")) {
def key = "${d.group}:${d.name}:${d.version}"
def configname = "config-${key}"
def c = project.configurations.create(configname)
c.getDependencies().add(d)
def task = task "task-${key}"(type: Copy) {
into "build/dependencies/${d.ext.exportTo}"
from c
}
project.tasks.add(task)
copyRuntimeLibs.dependsOn task
}
}
因此执行动态任务,但不会复制任何内容。当我添加'eachFiles'进行调试时,它不会去那里。
有任何线索吗?
答案 0 :(得分:0)
task copyRuntimeLibs
copyRuntimeLibs << {
configurations.runtime.allDependencies.withType(ExternalModuleDependency).each { d ->
def exportFolder = 'build/dependencies'
def exportSub = ''
if (d.hasProperty("exportTo")) {
exportSub = d.ext.exportTo
}
def key = "${d.group}:${d.name}:${d.version}"
def c = project.configurations.create("config-${key}")
c.getDependencies().add(d)
copy {
from c
into "${exportFolder}/${exportSub}/"
}
}
}