Плохая новость: обработчики аннотаций не могут этого сделать - характер их циклов означает, что не будет смысла генерировать источники в том же каталоге, где живут «фактические» источники, так как эти сгенерированные источникибудет рассматриваться как входные данные при следующем запуске процессора аннотаций.
Хорошая новость: JavaPoet не зависит от того, как вы на самом деле вызываете его, поэтому вы можете просто написать простой main (), который выполняет генерацию кода, и либопопросите IDE вызывать его при сборке или прикрепите к сборке gradle. Если вы планируете вручную редактировать источники после их создания, вы, вероятно, не хотите, чтобы это происходило, поскольку вы, вероятно, намереваетесь сохранить изменения, внесенные вручную, вместо того, чтобы перезаписывать их каждый раз при сборке.
The *Метод 1005 * имеет несколько переопределений, и только один из них принимает процессор аннотаций Filer
. Использование Filer
имеет некоторые преимущества - очень ясно, где вы собираетесь писать класс, - но JavaFile.writeTo(File directory)
также предназначен для использования таким образом. Вы не передаете ему фактический файл, где вы хотите, чтобы MyClass.java находился, а просто исходный каталог, в который вы хотите записать. В вашем случае это будет примерно javaFile.writeTo(new File("myProject/src/main/java"))
.
Вероятно, вам все еще следует параметризовать, как вызывать этот main, чтобы он знал, какие входы использовать, как понимать ваши существующие источники и т. Д. С другой стороныС другой стороны, если вашему generate_code()
не нужны какие-либо источники из того же проекта для запуска, это должно быть довольно просто.