温馨提示:本文翻译自stackoverflow.com,查看原文请点击:xml - jaxb
java jaxb xml xsd xjc

xml - 杰克斯

发布于 2020-04-23 11:06:15

我需要一些帮助,我正在尝试为我的应用程序解组XML。所以我有一个XSD文件,我想从中生成Java类。但是我不想使用XJC命令(因为它不在我的JDK中,而且我希望每次运行我的代码时都能自动完成它)。

有人可以在不使用xjc的情况下使用JAXB吗?

我正在使用Java(jdk:12&jre:8)和IntelliJ社区。

更新: pom文件中指示的插件无法正常工作“找不到工件。”

查看更多

提问者
ElisaGab
被浏览
31
Daniil 2020-02-06 19:28

这实际上取决于您的项目的组织/构建方式。如果您希望在每次构建项目时都在XSD文件的基础上生成要构建的Java类(这是有道理的,因为XSD文件可能由于新的要求或新的服务版本而被更改),则您可能应该使用构建管理器(Maven)或gradle)和适当的maven / gradle插件,这些插件将在项目构建过程中调用。

为此,可以使用maven-jaxb2-plugin,它也可以在后台使用XJC,但是当使用maven或gradle时,您不必担心系统中是否包含XJC,它将由项目构建下载。管理器以及定义的所有其他依赖项。

更新:

这是插件配置的示例:

<build>

    <plugins>

        <!-- Generate JAXB classes -->
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.13.1</version>
            <executions>
                <!-- Handle XML schema -->
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <schemaIncludes>
                            <include>PATH_TO_XSD_FILE</include>
                        </schemaIncludes>
                        <generatePackage>NAME_OF_JAVA_PACKAGE</generatePackage>
                    </configuration>
                    <id>jaxb-generate-classes</id>
                </execution>
            </executions>
            <configuration>
                <forceRegenerate>true</forceRegenerate>
                <generateDirectory>${project.build.directory}/generated-sources/xjc</generateDirectory>
                <verbose>true</verbose>
                <debug>true</debug>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-basics-annotate</artifactId>
                    <version>1.0.2</version>
                </dependency>
                <dependency>
                    <groupId>com.sun.codemodel</groupId>
                    <artifactId>codemodel</artifactId>
                    <version>2.6</version>
                </dependency>
            </dependencies>
        </plugin>

    </plugins>
</build>