Я пишу добавочную задачу для компиляции некоторых файлов. Давайте предположим, что это вариант использования: два исходных файла:
Main включает Lib . Поэтому, когда Lib модифицируется, Main также необходимо перекомпилировать.
Чтобы решить эту проблему, мне нужно вычислить граф зависимостей. Но я не хочу воссоздавать его каждый раз, когда одно изменение файла (повторное чтение всех файлов, которые мне нужны для компиляции, обходится дорого), я бы хотел хранить его где-нибудь. Итак, вот мой вопрос:
Как лучше хранить некоторые данные между несколькими выполнениями одной и той же задачи в одном проекте?
- Должен ли я создать файл и сохранить его в каталоге build
- Как получить доступ к каталогу сборки из моей задачи java?
- Могу ли я спросить Gradle для хранения
Map<String, String>
для этого проекта? - Или, может быть, есть какой-то волшебный механизм c gradle для настройки обнаружения FileChange?
Моя задача выглядит так:
public abstract class GradleCompile extends DefaultTask
{
@Incremental
@PathSensitive(PathSensitivity.NAME_ONLY)
@InputDirectory
abstract DirectoryProperty getInputDir();
@OutputDirectory
abstract DirectoryProperty getOutputDir();
@TaskAction
void compileShader(InputChanges inputChanges)
{
final var inputDir = getInputDir();
final var outputDir = getOutputDir();
try (final var compiler = ShadercCompiler.newCompiler())
{
for (final var change : inputChanges.getFileChanges(inputDir))
{
if (change.getFileType() == FileType.FILE)
{
compileFile(compiler, change, outputDir);
// => Here, I should recompile the files depending on this one.
}
}
} catch (final Exception e)
{
e.printStackTrace();
}
}
}