【发布时间】:2016-07-20 21:56:31
【问题描述】:
好的,我仍然有一个问题,非常感谢有人能阐明我显然缺少的东西。 我以为我理解了我想要完成的 Gradle 任务,但我似乎无法让最后一点工作。
这是我想要做的,按编号顺序:
- 创建一个动态的全局“copyExcludes”列表;在一项任务中
- 复制整个目录树,不包括“copyExcludes”列表;在另一个任务中
- 从 Copy 任务对文件树中的每个目录运行 maven 命令“mvn verify”
- 在所有 Maven 命令成功完成后,为目录树创建一个 ZIP 存档。
下面是代码,我一直在破解,无法获取“copyExcludes”列表,在“复制”任务执行之前更新,因此所有模块(子目录)都被复制,而不仅仅是少数几个我要。
/**
* Copy all files to ${assemblyDir}, then run 'mvn verify' on each and every included module.
* Then create an assembly ZIP
*/
def copyFromDir = rootProject.file('.')
def assemblyDir = "target/gradle_assembly"
def assemblyDestination = "target/assembly"
def assemblyName = "assembly.zip"
def List includedModules = []
//---------------------------------------------------------------------------//
def allModules = [
'common',
'spring-hello-world',
'spring-configuration',
'spring-advanced-configuration',
'spring-jdbc',
'spring-jms',
'spring-batch',
'spring-batch-configuration'
]
def copyExcludes = []
//---------------------------------------------------------------------------//
/**
* Copy all files from root (./)
but exclude the module sub directories that are from 'getCopyExcludes(allModules)'
*/
task copyFiles(type: Copy) {
def cpExcludes = []
ext {
println "********** copyFiles ext{} **********"
println "1 ********** (${copyExcludes.size()}) copyExcludes: '${copyExcludes}' **********"
cpExcludes = copyExcludes
cpExcludes = getCopyExcludes(allModules)
}
doFirst {
println "********** copyFiles doFirst{} **********"
println "2 ********** (${copyExcludes.size()}) copyExcludes: '${copyExcludes}' **********"
cpExcludes = copyExcludes
cpExcludes = getCopyExcludes(allModules)
println "********** (${cpExcludes.size()}) cpExcludes: '${cpExcludes}' **********"
}
// doLast{
if (file(buildDir).exists()) {
delete "./target"
}
from("${copyFromDir}") {
into '.'
include '*'
include '**/*' //to include contents of a folder present inside Reports directory
include '**/*.*' //to include contents of a folder present inside Reports directory
exclude (getCopyExcludes(allModules))
}
into {
def outputDir = assemblyDir;
outputDir
}
// }
}
//---------------------------------------------------------------------------//
//task mavenVerify() {
task mavenVerify(dependsOn:copyFiles) {
println "\n\n********** mavenVerify **********\n"
def moduleDir = "${assemblyDir}/code"
doLast {
// For each module that is to be included,
allModules.each { module ->
if (file("${assemblyDir}/code/${module}").exists()) {
moduleDir = "${assemblyDir}/code/${module}"
exec {
args "-D${mavenRepo} -D${mavenOpt}"
workingDir "${moduleDir}"
def command = commandLine 'mvn', 'verify'
}
println "----------> END ${moduleDir} ----------\n"
}
}
}
return "success"
}
//---------------------------------------------------------------------------//
/**
* Create a ZIP file for the previoulsy validate code copied and verified.
*/
task assembleZip(type: Zip, dependsOn:mavenVerify){
println "********** assembleZip **********"
from "${assemblyDir}"
include '*'
include '**/*' //to include contents of a folder present inside Reports directory
include '**/*.*' //to include contents of a folder present inside Reports directory
archiveName "${assemblyName}"
destinationDir(file("${assemblyDestination}"))
}
//---------------------------------------------------------------------------//
task basic_jdbc_aop_mvc_rest << {
println "********** basic_jdbc_aop_mvc_rest **********"
def modulesToKeep = []
// doFirst{
ext {
// Create List
modulesToKeep.addAll(modules_basic())
modulesToKeep.addAll(modules_jdbc())
// println "********** (${modulesToKeep.size}) modulesToKeep: '${modulesToKeep}' **********"
// allModules.removeAll(modulesToKeep)
// includedModules = allModules
// println "********** (${includedModules.size()}) allModules (pre): '${includedModules/**/}' **********"
// copyExcludes = getCopyExcludes(allModules)
// println "********** (${copyExcludes.size()}) copyExcludes: '${copyExcludes}' **********"
}
// doFirst{
// println "********** (${allModules.size()}) allModules (pre): '${allModules}' **********"
// println "********** (${modulesToKeep.size}) modulesToKeep: '${modulesToKeep}' **********"
// includedModules = allModules.minus(modulesToKeep)
allModules.removeAll(modulesToKeep)
includedModules = allModules
println "********** (${includedModules.size()}) allModules (pre): '${includedModules/**/}' **********"
copyExcludes = getCopyExcludes(allModules)
// println "********** (${copyExcludes.size()}) copyExcludes: '${copyExcludes}' **********"
// }
}
def List getCopyExcludes(mtr) {
def newList = mtr.collect{ "**/${it}" }
newList.addAll('**/target',
'**/.git',
'**/*.iml',
'**/.idea',
'**/gradle', // #5
'**/.gradle',
)
// newList.addAll(modulesToRemoveExclude(mtr))
println "********** getCopyExcludes newList (${newList.size}): '${newList}' **********"
return newList
}
[copyFiles]*.shouldRunAfter basic_jdbc_aop_mvc_rest
//---------------------------------------------------------------------------//
def modules_basic(){
return [
// Basic
'common',
'spring-hello-world',
'spring-configuration',
'spring-advanced-configuration'
]
}
def modules_jdbc(){
return [
// JDBC
'spring-jdbc'
]
}
//--- THE END ---------------------------------------------------------------//
【问题讨论】:
标签: java gradle groovy build.gradle