1

ソース ディレクトリを監視し、そのファイルを宛先ディレクトリと同期する commons-io に基づく Groovy スクリプトを作成しています。

@Grab(group='commons-io', module='commons-io', version='2.4')
import org.apache.commons.io.monitor.*
import org.apache.commons.io.FileUtils
class BaseSynchronizedFileListener extends FileAlterationListenerAdaptor {
    def srcDir
    def destDir   
    /* Given a source file, returns the destination file */
    File destination(File file) {
        new File(destDir, file.getAbsolutePath() - srcDir.getAbsolutePath())
    }
}
class CopyOnWriteListener extends BaseSynchronizedFileListener {
    @Override 
    void onFileChange(File file) {
        FileUtils.copyFile(file, destination(file))
    }
    @Override
    void onFileCreate(File file) { 
        FileUtils.copyFile(file, destination(file))
    } 
}
class DeleteOnDeleteListener extends BaseSynchronizedFileListener {
    @Override
    void onFileDelete(File file) {
        FileUtils.deleteQuietly(destination(file))
    }
}

直接のファイル コピーに加えて、ソース ディレクトリのファイルが宛先ディレクトリのファイルと.less同期される Less->CSS コンパイルをサポートしたいと考えています。.css

@Grab(group='org.lesscss', module='lesscss', version='1.3.3')
import org.lesscss.LessCompiler
class CompileLessOnWriteListener extends BaseSynchronizedFileListener {
    def compiler = new LessCompiler()
    @Override
    File destination(File file) {
        File dest = super.destination(file)
        new File(dest.parentFile, dest.name - '.less' + '.css')
    }
    void compile(File less) {
        compiler.compile(less, destination(less))
    }
    @Override
    void onFileChange(File less) {
        compile(less)
    }
    @Override
    void onFileCreate(File less) { 
        compile(less)
    } 
}

私が直面している問題は、ファイルが削除されDeleteCssOnDeleteLessListenerたときの状況を処理するクラスを作成しようとしたとき.lessです (これにより、対応するファイルが削除され.cssます)。これを行うために必要なコードは、2 つの異なる継承ツリーに存在します。

  • CompileLessOnWriteListenerdestination()メソッドを含む
  • DeleteOnDeleteListeneronFileDelete()メソッドによって返された CSS ファイルを削除するメソッドがdestination()含まれています

これらのクラスの両方から新しいクラスにメソッドを選択的にミックスインまたは継承する「Groovy の方法」はありますか?

それとも、弾丸を噛んで and の共通のスーパークラスを作成する必要がCompileLessOnWriteListenerありDeleteCssOnDeleteLessListenerますか?

4

2 に答える 2