maven-compiler-plugin: добавить дополнительную зависимость для добавочной сборки

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

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

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

Подходы:

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


person Caesar    schedule 18.02.2020    source источник
comment
Мой реальный вопрос был бы... почему это должен быть класс. Что не так с простой загрузкой данных из ресурса пути к классам во время выполнения?   -  person Gimby    schedule 18.02.2020
comment
У нас есть система, которая использует файлы классов с одним методом для выполнения некоторой легкой обработки. Это ограничение, которое делает многие другие вещи неудобными, так что со временем эта проблема для меня исчезнет.   -  person Caesar    schedule 19.02.2020


Ответы (1)


Возможно, это не полный ответ, а просто мои мысли по поводу вышеизложенного:

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

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

Это также написано, например, в этом руководстве.

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

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

person Mark Bramnik    schedule 18.02.2020