当前位置: 首页 > 知识库问答 >
问题:

jaxb2-annotate-plugin为lombok注释添加断开的可选内容

娄利
2023-03-14

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

注释类是lombok.noargsConstructor,它有可选的实验参数onConstructor

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

@NoArgsConstructor
public class Foo ...

但我得到的是

@NoArgsConstructor(onConstructor = {

})
public class Foo ...

我不想要添加的参数(不确定该参数的专有名词是什么),此外,这是不正确的,因为它需要额外的信息,在本例中,需要向生成的构造函数添加注释。

所以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
Apache ant(TM)版本1.10.1于2017年2月2日编译,尝试默认构建文件:build.xml buildfile://users/kamb/worksspace/oads_xml/versions/a0.2/build.xml检测Java版本:1.8 in:/library/Java/javavirtualmachines/jdk1.8.0_121.=file://users/kamb/workspace/oads_xml/versions/a0.2/build.xml项目基本目录设置为:/users/kamb/workspace/oads_xml/versions/a0.2
解析buildfile jar:file://opt/local/apache-ant-1.10.1/lib/ant.jar!/org/Apache/tools/ant/antlib.xml和URI=jar:file://opt/local/apache-ant-1.10.1/lib/ant.jar!/org/Apache/tools/ant/antlib.xml。属性“java.home”忽略重写目标'generate-sources'的构建序列为[generate-sources]完整的构建序列为[generate-sources、check、compile、package、install、test-compile、test-compile、test、clean]
generate-sources:
[xjc]xjc的构建id为2.3.0
[xjc]检查/users/kamb/workspace/oads_xml/versions/a0.2/bindings.xjb
[xjc]检查时间戳/workspace/oads_xml/versions/a0.2/person.xjb
[xjc]检查/users/kamb/workspace/oads_xml/versions/a0.2/person.xjb
[xjc]检查/users/kamb/workspace/oads_xml/variables.xjb
[xjc]检查时间戳/users/kamb/workspace/oads_xml/versions/a0.2/xdata_a0.2.xsd
[xjc]检查时间戳ace/oads_xml/versions/a0.2/person.xsd
[xjc]检查/users/kamb/workspace/oads_xml/versions/a0.2/va的时间戳riables.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个答案

苏骏
2023-03-14

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

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

这么简单。

 类似资料:
  • 为了进行测试,我在模式中添加了以下内容, 之后XJC开始给出以下错误, 不支持的绑定命名空间“http://annox.dev.java.net”。也许您指的是“http://java.sun.com/xml/ns/jaxb/xjc”? xjc-p com.test-classpath=“jaxb2-basics-annotate-1.0.2.jar;tools-0.4.1.5.jar;comm

  • 我正在使用maven-jaxb2-plugin和jaxb2-basics-annotate插件从我的xsd自动生成POJO。我已经成功地在POJO中生成了注释。我需要将注释应用于枚举中的方法,但不知道如何做到这一点。 xsd有, 生成的文件 我需要的是在上面的value方法中添加JsonValue注释。 我尝试了以下和其他一些调整,但在绑定。xjb什么都不起作用。 有什么叫做annotateEnu

  • 我有一把刀: 问题是,当我试图使用DAO进行加载调用时,使用DynamoDBMapper以field d1作为哈希键来获取项目,它会抛出一个DynamoDBExc0019,说:为公共DAO. getField2()找到了空键,但实际上表的值对应于field d2。问题,这是因为Lombok注释而不是手动突变代码,还是一般来说我们一起使用Lombok和DynamoDBAnnotions?

  • 创建类的首选方法是什么 不可变 可以使用Jackson进行序列化/反序列化 可读性强,样板文件水平低 最好是,我希望这样的东西能起作用: 然后将所有字段设置为。然而,这甚至不能编译(我不知道为什么)。使用 将编译,但仅生成