2016-07-20 9 views
0

私はまだ問題があり、私が明らかに欠けているものについていくつかの光を漏らしていることに非常に感謝します。 私は達成したいGradleタスクを理解していると思っていましたが、最後のビットを働かせることはできません。ここでコピータスクの動的グローバルリストを作成するためのGradleタスクのオーダーは除外されます

は、私が番号順に、何をしたいです:

  1. ダイナミック、グローバルな「copyExcludes」リストを作成します。 1つのタスクで
  2. 'copyExcludes'リストを除くディレクトリツリー全体をコピーします。
  3. コピータスクからファイルツリー内のすべてのディレクトリでmavenコマンド 'mvn verify'を実行します。
  4. すべての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 ---------------------------------------------------------------// 

は、私はあなたがすべてのデバッグ文を自分で混乱するかもしれないと思うここにコード

答えて

0

入力します。おそらくそれを最小限に抑えることで、問題をより良く見るのに役立ちますか?

たとえば、「入り口」のような問題のある領域は見えません。 from句の中にあり、奇妙な "def List getCopyExcludes(mtr)"関数宣言があります。

たとえば、ここには、あなたがやりたいことをする同様の小さなスクリプトがあります。

def copyFromDir = "source/gradle_assembly" 
def assemblyDir = "target/gradle_assembly" 

task copyFiles(type: Copy) { 
    from "${copyFromDir}" 
    into "${assemblyDir}" 
    exclude getCopyExcludes() 
} 

def getCopyExcludes() { 
    // exclude these 2 log files 
    return ["tomcat.log", "cargo.log"] 
} 

おそらくここから、まだ動作していることを確認しながら、各タスクを一度に1つずつ追加して、現在のバージョンに展開できますか?それが何かを壊してしまったら、何が原因か分かります。

+0

私はこの例から始めることができますが、実際のリストを設定するタスクを呼び出すか、コマンドラインから取り込まれた一連のパラメータのように、コマンドラインから入力を取る方法を教えてください。 –

+1

-Pparam1 = helloを使用して、gradlewタスクにパラメータを渡すことができます。グラデーションコードの中では、project.getProperty( "param1")を使ってアクセスすることができます。これはあなたの質問に答えますか? :) –

関連する問題