ソース ディレクトリを監視し、そのファイルを宛先ディレクトリと同期する 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 つの異なる継承ツリーに存在します。
CompileLessOnWriteListener
destination()
メソッドを含むDeleteOnDeleteListener
onFileDelete()
メソッドによって返された CSS ファイルを削除するメソッドがdestination()
含まれています
これらのクラスの両方から新しいクラスにメソッドを選択的にミックスインまたは継承する「Groovy の方法」はありますか?
それとも、弾丸を噛んで and の共通のスーパークラスを作成する必要がCompileLessOnWriteListener
ありDeleteCssOnDeleteLessListener
ますか?