2016-10-21 11 views
0

utilに区切るために移動コピーの閉鎖は、私はいくつかのカスタム仕様に基づいて、tarファイルを作成し、このカスタムのGradleプラグインを持っている:のGradle/Groovyの:方法

tar.into("${project.name}-${project.version}"){ 
    into('lib'){ 
     from project.tasks.jar 
     from project.configurations.runtime 
    } 

    //fix line endings for *.sh and *.conf files 
    from("src/main/assembly"){ 
     include '**/*.sh' 
     include '**/*.conf' 
     filter(FixCrLfFilter, eol:FixCrLfFilter.CrLf.newInstance("unix")) // change line endings to unix format 
     fileMode = 0744 
     dirMode = 0755 
    } 

    //leave rest of the assembly untouched except for the filtered files above 
    from("src/main/assembly"){ 
     exclude '**/*.sh' 
     exclude '**/*.conf' 
     fileMode = 0744 
     dirMode = 0755 
    } 
} 

を私はSRC「(から」2を抽出したいと思います/ main/assembly ")"ブロックを別のutilクラスに入れて、別のプラグインで再利用することができます。このような何か:その後、

class AssemblyUtil { 

    def static CopySpec assemblyFiles = copySpec { 
     //fix line endings for *.sh and *.conf files 
     from("src/main/assembly"){ 
      include '**/*.sh' 
      include '**/*.conf' 
      filter(FixCrLfFilter, eol:FixCrLfFilter.CrLf.newInstance("unix")) // change line endings to unix format 
      fileMode = 0744 
      dirMode = 0755 
     } 

     //leave rest of the assembly untouched except for the filtered files above 
     from("src/main/assembly"){ 
      exclude '**/*.sh' 
      exclude '**/*.conf' 
      fileMode = 0744 
      dirMode = 0755 
     } 
    } 
} 

そして元のメソッドをリファクタリングすることができる:私は他のプラグインで閉鎖ブロックを再利用することができますこの方法

tar.into("${project.name}-${project.version}"){ 
    into('lib'){ 
     from project.tasks.jar 
     from project.configurations.runtime 
    } 

    with AssemblyUtil.assemblyFiles 
} 

動作しません。私は構文がわからない。これは可能ですか?誰もそれを得るのを助けることができますか?

ありがとうございます!

答えて

0

ちょっと野生の推測ですが、静的コンテキストで仕様を定義することと関係があるかもしれません。たぶん、次の作業を行います。

class AssemblyUtil { 

    def static CopySpec assemblyFiles(Project project) = project.copySpec { 
     ... 
    } 
} 

し、この方法にプロジェクトを渡す

tar.into("${project.name}-${project.version}"){ 
    into('lib'){ 
     from project.tasks.jar 
     from project.configurations.runtime 
    } 

    with AssemblyUtil.assemblyFiles(project) 
} 
+0

は、静的なしでは動作しません。 – KasperF

+0

"問題"は私にプロジェクトインスタンスがないことです。これは単なるutilクラスです – KasperF

+0

はい、引数として渡すことはできます。 –