Генерация исходников
Иногда требуется сгенерировать часть исходных текстов модуля.
Для этого в jandcode.jc.std.JavaProject имеется средство genSrc.
def m = include(JavaProject)
m.genSrc(OUTDIR) {t -> // генерация исходников
CODE;
}
m.genSrcTest(OUTDIR) {t -> // генерация тестовых исходников
CODE;
}
//...
Наличие такого кода в project.jc создаст команду gen-src в проекте.
Причем, если имеется корневой проект, который включает этот java-проект как модуль,
то в корневом то же появится команда gen-src.
Команда gen-src выполняется автоматически перед компиляцией проекта.
Объявлений m.genSrc(OUTDIR) может быть несколько.
В closure передается параметр t типа jandcode.jc.std.JavaProject.GenTask,
который имеет свойства:
dir- куда генерировать. Этот каталог был указан в параметреOUTDIRпри объявлении процедуры генерации. Перед выполнением каталог очищается.dirPackage- каталог с пакетом модуля внутри каталога генерации. Физически этот каталог не создается.
Каталоги, объявленные в genSrc, считаются частью исходных текстов и используются
при компиляции исходников как их неотъемлемая часть, просто валяющаяся в особом месте.
Каталоги, объявленные в genSrc, подключаются в IDE как каталоги с сгенерированными
исходниками. Поэтому не следует генерировать их в исключаемую в IDE папку.
Например каталог temp - неудачное место для генерации.
По соглашению вся генерация производится в подкаталоги каталога _gen.
Для каждого объявления genSrc - свой подкаталог.
m.genSrc(wd('_gen/data1')) {t->
ant.echo(message:'hello', file: t.dirPackage+'/file1.txt')
}
m.genSrc(wd('_gen/data2')) {t->
ant.echo(message:'hello', file: t.dirPackage+'/file2.txt')
}
Если задача генерации не указана, то каталог генерации не будет очищен. Считается, что исходники в этом каталоге сгенерированы вне процесса компиляции.
// в каталоге src.gen файлы сгенерены вне процесса компиляции
m.genSrc(wd('src.gen'))