jaxb2-annotate-plugin добавление неработающего необязательного контента для аннотации lombok
Я использую плагин jaxb2-annotate-plugin для добавления аннотаций проекта lombok в мой сгенерированный код Java. В некоторых случаях плагин добавляет дополнительную (в данном случае экспериментальную) дополнительную информацию к аннотации.
Класс аннотации - lombok.NoArgsConstructor, который имеет необязательный экспериментальный параметр onConstructor.
Типичный и ожидаемый результат должен быть просто:
@NoArgsConstructor
public class Foo ...
Но то, что я получаю, это
@NoArgsConstructor(onConstructor = {
})
public class Foo ...
Я не хочу, чтобы добавленный параметр (не уверен, каков правильный термин для этого), и, кроме того, он некорректен, так как требует дополнительной информации, в данном случае, аннотаций для добавления в сгенерированный конструктор.
Итак 2 вопроса:
Как я могу скрыть эту добавленную информацию?
Если бы я хотел добавить этот параметр, как бы я добавил необходимую дополнительную информацию?
спасибо Линус
пс. Кроме того, не имеет прямого отношения к вопросу: этот плагин является новым для меня. Я изменил файл build.xml из одного из предоставленных примеров для запуска xjc с плагином через ant. В то время как код генерируется должным образом, вывод, кажется, говорит иначе. Подробный вывод муравья следует. Файл build.xml находится в jaxb2-annotate-plugin-master/samples/annotate/target/test-ant-Assembly / jaxb2-annotate-plugin-sample-annotate-1.1.1-SNAPSHOT /
ant -verbose generate-sources JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
Apache Ant (TM) версия 1.10.1, скомпилированная 2 февраля 2017 г. Попытка файла сборки по умолчанию: build.xml Buildfile: /Users/kamb/workspace/oads_xml/versions/a0.2/build.xml Обнаруженная версия Java: 1.8 в: /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre
Обнаруженная ОС: файл разбора Mac OS X /Users/kamb/workspace/oads_xml/versions/a0.2/build.xml с URI = файл:/Users/kamb/workspace/oads_xml/versions/a0.2/build.xml Project базовый каталог установлен в /Users/kamb/workspace/oads_xml/versions/a0.2
Разбор jar файла сборки:file:/opt/local/apache-ant-1.10.1/lib/ant.jar!/org/apache/tools/ant/antlib.xml с URI = jar: файл: / opt / local / apache -ant-1.10.1 / lib / ant.jar! /org/apache/tools/ant/antlib.xml из zip-файла [свойство] Загрузка среды env. Переопределение игнорируется для свойства "java.home" Последовательность сборки для цели (ей) `generate-sources'равна [generate-sources] Полная последовательность сборки: [generate-sources, check, compile, package, install, test-compile, test, чистый,]
генерировать-источники:
[xjc] идентификатор сборки XJC равен 2.3.0
[xjc] Проверка метки времени /Users/kamb/workspace/oads_xml/versions/a0.2/bindings.xjb
[xjc] Проверка метки времени /Users/kamb/workspace/oads_xml/versions/a0.2/commonTypes.xjb
[xjc] Проверка метки времени /Users/kamb/workspace/oads_xml/versions/a0.2/person.xjb
[xjc] Проверка метки времени /Users/kamb/workspace/oads_xml/versions/a0.2/variables.xjb
[xjc] Проверка метки времени /Users/kamb/workspace/oads_xml/versions/a0.2/commonTypes.xsd
[xjc] Проверка метки времени /Users/kamb/workspace/oads_xml/versions/a0.2/oads_metadata_a0.2.xsd
[xjc] Проверка метки времени /Users/kamb/workspace/oads_xml/versions/a0.2/person.xsd
[xjc] Проверка метки времени /Users/kamb/workspace/oads_xml/versions/a0.2/variables.xsd
[xjc] время последнего изменения входов - 1553044581000
[xjc] время последнего изменения выходов -9223372036854775808
[xjc] Подумайте об использовании /, чтобы XJC не делал ненужной компиляции
[xjc] Файл компиляции:/Users/kamb/workspace/oads_xml/versions/a0.2/commonTypes.xsd и другие
[xjc] Запись выходных данных в /Users/kamb/workspace/oads_xml/versions/a0.2/gen_src
[xjc] Command invoked: xjc/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/bin/java
[xjc] failure in the XJC task. Use the Ant -verbose switch for more details
/Users/kamb/workspace/oads_xml/versions/a0.2/build.xml:106: xjc failed
at com.sun.tools.xjc.XJCBase.execute(XJCBase.java:731) at com.sun.tools.xjc.XJC2Task.execute(XJC2Task.java:55) at org.jvnet.jaxb2_commons.xjc.XJC2Task.execute(XJC2Task.java:35) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:435) at org.apache.tools.ant.Target.performTasks(Target.java:456) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405) at org.apache.tools.ant.Project.executeTarget(Project.java:1376) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1260) at org.apache.tools.ant.Main.runBuild(Main.java:857) at org.apache.tools.ant.Main.startAnt(Main.java:236) at org.apache.tools.ant.launch.Launcher.run(Launcher.java:287) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:113)
1 ответ
Хорошо, на дальнейших экспериментах я разобрался.
Мне нужно было использовать аннотации в стиле Java, а не то, что я думаю, это старый стиль, который я выбрал, посмотрев на старые вопросы по SE. Итак, вместо:
<jaxb:bindings node="xs:complexType[@name='typed_string_type']">
<annox:annotate>
<annox:annotate annox:class="lombok.Builder" />
<annox:annotate annox:class="lombok.NoArgsConstructor" />
<annox:annotate annox:class="lombok.AllArgsConstructor" />
</annox:annotate>
</jaxb:bindings>
Мне нужно было использовать:
<jaxb:bindings node="xs:complexType[@name='value_with_unit_type']">
<annox:annotate>@lombok.Builder</annox:annotate>
<annox:annotate>@lombok.NoArgsConstructor</annox:annotate>
<annox:annotate>@lombok.AllArgsConstructor</annox:annotate>
</jaxb:bindings>
Так просто.