首页 > 解决方案 > jaxb2-annotate-plugin 为 lombok 注释添加损坏的可选内容

问题描述

我正在使用 jaxb2-annotate-plugin 将项目 lombok 注释添加到我生成的 java 代码中。在某些情况下,插件会向注释添加可选的(在这种情况下是实验性的)额外信息。

注解类是lombok.NoArgsConstructor,有可选的实验参数onConstructor

典型和预期的输出应该是:

@NoArgsConstructor
public class Foo ...

但我得到的是

@NoArgsConstructor(onConstructor = {

})
public class Foo ...

我不想要添加的参数(不确定正确的术语是什么),此外,它是不正确的,因为它需要额外的信息,在这种情况下,需要添加到生成的构造函数的注释。

所以2个问题:

  1. 我怎样才能抑制这个添加的信息?

  2. 如果我确实想要这个添加的参数,我将如何添加必要的附加信息?

谢谢,莱纳斯

附言。作为与问题没有直接关系的旁白:这个插件对我来说是新的。我已经从提供的示例之一修改了 build.xml 文件,以通过 ant 使用插件运行 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
2017 年 2 月 2 日编译的 Apache Ant(TM) 版本 1.10.1 尝试默认构建文件:build.xml 构建文件: /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使用 URI = file:/Users/kamb/workspace/oads_xml/versions/a0.2/build.xml 解析构建文件 /Users/kamb/workspace/oads_xml/versions/a0.2/build.xml 项目基础目录设置为:/用户/kamb/workspace/oads_xml/versions/a0.2
使用 URI = jar:file:/opt/local/apache 解析构建文件 jar:file:/opt/local/apache-ant-1.10.1/lib/ant.jar!/org/apache/tools/ant/antlib.xml -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, clean, ]
generate-sources:
[xjc] XJC 的构建 ID 为 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] 的时间戳 [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)

标签: javalombokxjcjaxb2-annotate-plugin

解决方案


好的,在进一步的实验中,我想通了。

我需要使用 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>

很简单。


推荐阅读