maven-compiler-plugin: добавить дополнительную зависимость для инкрементной сборки - PullRequest
4 голосов
/ 18 февраля 2020

Я хочу создать файл класса java с классом с длинной многострочной строковой константой. (Обычный способ поместить строку в отдельный файл и загрузить ее из того же JAR-файла, что и класс, не подходит. JAR не будет, только этот файл класса.) Изначально я использовал multiline-string процессор аннотаций, он позволяет помещать содержимое строки в комментарий do c:

/**
 * This will be the actual
 * content of the string
**/
@Multiline static final String foo = "this literal is ignored";

Здесь я ошибочно подумал: «о, комментарии неудобны, почему бы не изменить многострочный -строка для загрузки содержимого из внешнего файла? " Оказывается, это работает, но maven (который я использую для сборки), конечно, не понимает, что файл класса необходимо перекомпилировать, если файл, считываемый процессором аннотаций, изменяется.

Подходы :

  • установить useIncrementalCompilation на false: совсем не выполняет то, что я ожидал, вместо этого отключает проверку зависимостей для инкрементных сборок
  • add .py до fileExtensions (не ожидал, что это сработает)
  • добавить maven-clean-plugin как часть фазы инициализации: это работает, но это немного излишне…

Что я действительно хотел бы сделать, так это добавить путь к внедренному файлу в список maven «если этот файл изменится, перекомпилируйте этот файл». Возможно ли это, или есть другой, элегантный способ решения этой проблемы?

1 Ответ

1 голос
/ 18 февраля 2020

Может быть, это не полный ответ, а только мои мысли по поводу вышеизложенного:

Процессоры аннотаций в java обычно не предназначены для изменения существующих классов.

Да, есть Lombok, который как бы нарушает это предположение, но цена использует некоторые внутренние API-интерфейсы компилятора и "вручную" компилирует модифицированный AST:

Это также написано на этот учебник например.

Обычно обработчики аннотаций могут создавать некоторые дескрипторы, например JSON или файлы, или, альтернативно, новые Java источники, но они никогда (опять же, за исключением lombok) ) измените существующие источники.

Если я вас правильно понял, вы написали свой собственный процессор аннотаций для многострочной обработки, подобный тому, который вы указали в первой ссылке , но этот вид несовместим с идеей процессоров аннотаций, поэтому я сомневаюсь, что maven может помочь вам здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...