Я работаю над сценарием Jenkins-Pipeline, которому нужно записать в файл строку с определенной кодировкой, как в следующем примере:
class Logger implements Closeable {
private final PrintWriter writer
[...]
Logger() {
FileWriter fw = new FileWriter(file, true)
BufferedWriter bw = new BufferedWriter(fw)
this.writer = new PrintWriter(bw)
}
def log(String msg) {
try {
writer.println(msg)
[...]
} catch (e) {
[...]
}
}
}
Приведенный выше код не работает с PrintWriter
это не сериализуемо, так что я знаю, что должен предотвратить преобразование некоторых кодов CPS. Однако я не знаю, как это сделать, поскольку, насколько я знаю, аннотация @NonCPS
может применяться только к методам. Я знаю, что одним из решений было бы переместить весь код, связанный с выводом, в log(msg)
и аннотировать метод, но таким образом мне пришлось бы создавать нового писателя при каждом вызове метода.
Есть ли у кого-то Идея о том, как я могу исправить свой код вместо этого?
Заранее спасибо!