使用maven自动生成jaxb.index文件

u7up0aaq  于 2023-10-17  发布在  Maven
关注(0)|答案(3)|浏览(171)

我有一个包,里面有多个java类。
我需要读取包含包类数据的xml文件。
是否有一种自动的方法(使用maven)从包的内容生成ObjectFactory类或jaxb.index文件?
我知道我可以用特定的类初始化jaxb上下文,但这将迫使我在每次添加新类时更改代码。
提前感谢,
Avner

bgibtngc

bgibtngc1#

你必须使用jaxb 2-maven插件来生成其他东西。如果类有适当的注解,这不应该是一个问题。

<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.3.1</version>

标签:http://mojo.codehaus.org/jaxb2-maven-plugin/

xxhby3vn

xxhby3vn2#

在做了一些研究之后,我选择使用API JAXBContext.newInstance,它接受一个类数组。我已经编写了一个简短的 Package 器,它接受包名称并使用spring扫描它们以获得相关的类(基于XmlRootElement注解)。然后使用上面的API创建jaxb上下文。因为这是一个开销很大的操作,所以你应该考虑缓存这些上下文(它们是线程安全的)以备将来使用。

1zmg4dgp

1zmg4dgp3#

最简单的方法是使用Atteo的类索引。有这个Maven依赖:

<dependency>
    <groupId>org.atteo.classindex</groupId>
    <artifactId>classindex</artifactId>
    <version>3.13</version>
</dependency>

将向构建添加注解处理器。
@IndexSubclasses注解添加到相应的package-info.java将使注解处理器生成jaxb.index文件。即:

@XmlSchema(
        namespace = "https://schemas.com/super.xsd",
        elementFormDefault = XmlNsForm.QUALIFIED
)
@XmlAccessorType(XmlAccessType.FIELD)
@IndexSubclasses
package pkg.with.my.schema;

import org.atteo.classindex.IndexSubclasses;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

重要这种方法的一个大缺点是Atteo的注解具有运行时保留;因此,依赖关系必须作为运行时依赖关系和编译时依赖关系包含在内。如果您正在构建一个自包含的jar,那么使用Atteo的类索引将不再可能,除非您使用依赖项屏蔽或构建jar。

相关问题