У меня есть проект Gradle. В моем исходном коде у меня есть некоторые аннотации (среди прочего), которые принимают ту же строку. Тем не менее, эта же строка существует в файле конфигурации, и я хотел бы сослаться только на этот файл, поэтому мне нужно изменить эту строку только в одном месте, чтобы изменить все его экземпляры. Из-за этого мне пришлось бы читать строку из файла, то есть строка не является константой времени компиляции. Таким образом, я не могу использовать строку, считанную из файла, в качестве аргумента аннотации.
// I have this.
@Annotation("some_string")
Object a;
@Annotation("some_string")
Object b;
// This doesn't work
String ss = // read a file, fetch the string from the file.
@Annotation(ss)
Object a;
@Annotation(ss)
Object b;
Мне было интересно, есть ли способ в Gradle изменить исходный код до компиляции таким образом, который позволяет мне чтобы одна переменная управляла всеми аргументами аннотации.
Т.е. в исходном коде я мог бы иметь @Annotation("%%some_string%%")
и заменить все вхождения %%some_string%%
на переменную в задаче Gradle. Было бы достаточно легко просто изменить каждый исходный файл, например,
def annotation_variable = // read a file, fetch the string from the file.
for ( f in srcFileTree ) {
def text = file(f).text
file(f).text = text.replaceAll("%%some_string%%", annotation_variable)
}
Однако это навсегда изменило бы исходный файл. Итак, я ищу способ изменить файл в конвейере, фактически не изменяя файл на диске. Есть ли способ сделать это?