Генерация исходников
Иногда требуется сгенерировать часть исходных текстов модуля.
Для этого в 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'))