gpt4 book ai didi

java - 修改 java 类以在编译时包含特定注释

转载 作者:搜寻专家 更新时间:2023-11-01 01:51:48 25 4
gpt4 key购买 nike

我有许多由 JAXB 的 xsd2java 生成的类。我需要在编译时使用特定注释对所有这些类进行注释(例如使用 lombok 注释)。有没有办法做到这一点,例如使用一些代码生成工具?

最佳答案

免责声明:我是 JAXB2 Annotate Plugin 的作者这允许您向模式派生类添加任意注释。

简短示例:

<xsd:complexType name="FooType">
<xsd:annotation>
<xsd:appinfo>
<annox:annotate>@java.lang.SuppressWarnings({"unchecked","rawtypes"})</annox:annotate>
<annox:annotate target="package">@javax.annotation.Generated({"XJC","JAXB2 Annotate Plugin"})</annox:annotate>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="bar" type="xsd:string"/>
<xsd:element name="foobar" type="xsd:string">
<xsd:annotation>
<xsd:appinfo>
<annox:annotate>@java.lang.SuppressWarnings({"unchecked","rawtypes"})</annox:annotate>
<annox:annotate target="setter">@java.lang.Deprecated</annox:annotate>
<annox:annotate target="setter-parameter">@java.lang.Deprecated</annox:annotate>
<annox:annotate target="getter">@java.lang.Deprecated</annox:annotate>
<annox:annotate target="field">@java.lang.Deprecated</annox:annotate>
<annox:annotate target="class">@java.lang.Deprecated</annox:annotate>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>

也适用于外部绑定(bind)文件。

限制:

  • 注释以 Java 语法提供,但您必须使用完全限定的名称。
  • 您必须将注释类(例如 lombok)包含到 XJC 类路径中,因为这些类在模式编译期间必须可用。

附言。我假设当您说 xsd2java 时,您可能指的是 XJC .

更新

OP 在评论中询问如何使用 配置它.

您可以将 jaxb2-annotate-plugin 一起使用以及。我只是从未尝试过。

  • 您可以使用 pom.xml 中的 dependencies/depenency 将其他 JAR 包含到类路径中。
  • 然后您需要将参数添加到配置中。

请参阅此答案(和问题)以获取示例:

https://stackoverflow.com/a/12804497/303810

它是关于其他插件的,但您将获得有关如何使用 Codehaus 配置它的线索 .

配置我的将如下所示:

<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<extension>true</extension>
<args>
<arg>-Xannotate</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-annotate-plugin-test-annox-annotations</artifactId>
</plugin>
</plugins>
</configuration>
</plugin>

这部分:

<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-annotate-plugin-test-annox-annotations</artifactId>
</plugin>

指的是包含注释类的工件。

这是一个示例 pom.xml对于/组合。

关于java - 修改 java 类以在编译时包含特定注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26797524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com