Генерация исходников

Связи
  • jandcode.jc.std.JavaProject (class)

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