我正在使用jaxb2-annotate-plugin将项目lombok注释添加到生成的Java代码中。在某些情况下,该插件会在注释中添加可选的(在本例中为实验性)额外信息。
注释类是lombok.NoArgsConstructor,它具有可选的onConstructor实验参数
典型的和预期的输出应为:
@NoArgsConstructor
public class Foo ...
但是我得到的是
@NoArgsConstructor(onConstructor = {
})
public class Foo ...
我不需要添加的参数(不确定该使用的术语是什么),此外,它是不正确的,因为它需要其他信息,在这种情况下,需要将注释添加到生成的构造函数中。
所以有2个问题:
如何隐藏此添加的信息?
如果我确实想要此添加的参数,如何添加必要的其他信息?
谢谢, 莱纳斯
ps。 顺便说一句,与这个问题没有直接关系:这个插件对我来说是新的。我已经从提供的示例之一修改了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 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项目 基本目录设置为:/Users/kamb/workspace/oads_xml/versions/a0.2
解析构建文件 jar:文件:/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]完整的构建顺序 是[生成源,检查,编译,打包,安装,测试编译, 测试,干净,]
生成源:
[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)
答案 0 :(得分:0)
好吧,在进一步的实验中,我知道了。
我需要使用Java样式注释,而不是我认为是通过查看较旧的SE问题获得的Old Style。因此,代替:
<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>
那么简单。